分类
laravel php web

基于当前页面URL展示不同分类或层级数据的功能

<?php
if (!function_exists('get_url')) {
    function get_url(){
        $urlTable = explode('?_', array_slice(explode("/", $_SERVER['REQUEST_URI']), 2, 1)[0])[0];
        if (explode('?', $urlTable)) {
            $urlTable = explode('?', $urlTable)[0];
        }
        return $urlTable;
    }

}
//   app/helpers.php
if(get_url()=='channel'){
                $grid->model()->where('parent_id',null);
            }

            if(get_url()=='channel2'){
                $grid->model()->where('parent_id',1);
            }

            if(get_url()=='channel3'){
                $grid->model()->where('parent_id',2);
有什么功能
XXXController.php

这段代码的主要功能是根据当前页面的URL(通过get_url()函数获取)来动态地修改一个名为$grid的对象的模型(model)查询条件。这里假设$grid对象是一个用于展示数据网格(可能是表格、列表等)的组件,而它的模型(model)则负责从数据库中检索数据。通过修改模型的查询条件,可以控制哪些数据被检索出来并展示在$grid上。

具体来说,代码中的每个if语句块都检查get_url()函数的返回值,该返回值假定为当前页面的某种标识符(如URL的一部分或特定的路由名称)。根据这个标识符,代码设置$grid的模型($grid->model())的查询条件,以限制查询结果中的parent_id字段的值。

  • 如果get_url()返回'channel',则查询条件设置为where('parent_id', null),这意味着只检索那些parent_idnull的记录。这通常用于检索顶级分类或没有父级分类的记录。
  • 如果get_url()返回'channel2',则查询条件设置为where('parent_id', 1),意味着只检索那些parent_id1的记录。这通常用于检索某个特定父级分类下的子分类或记录。
  • 如果get_url()返回'channel3',则查询条件设置为where('parent_id', 2),与上一个例子类似,但这次是针对parent_id2的记录。

需要注意的是,这段代码中的$grid->model()->where(...)调用可能会根据$grid对象的实现和框架的约定而有所不同。在一些框架中,直接链式调用where方法可能不会立即执行查询,而是构建了一个查询构建器(query builder)实例,该实例之后会在需要时(如调用get()first()等方法时)执行实际的数据库查询。

此外,get_url()函数的,是一个能够返回当前页面URL或相关标识符的函数。这个函数的具体实现将取决于你的应用程序或框架。

总的来说,这段代码通过动态地设置查询条件,实现了基于当前页面URL展示不同分类或层级数据的功能。

路由写法 ,一个控制器对应三个路由,根据条件限制为3个页面

    $router->resource('channel', 'MyChannelController');
    $router->resource('channel2', 'MyChannelController');
    $router->resource('channel3', 'MyChannelController');