过滤器
默认过滤器

默认会创建一个全部字段的搜索框, 点击搜索时, like查询全部字段

默认搜索框
创建过滤器

创建过滤器只需要重写configListFilter方法:

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\ListFilter;

class Category extends \easyadmin\controller\Admin
{
    protected function configListFilter(ListFilter $filter)
    {
        $filter->addFilter('name', '名称', FormText::class);
    }
}

过滤器 join

过滤器使用 join 同 列表的join 一样, 先调用configListJoin方法,记住声明的别名,然后什么过滤器字段的时候使用相同的别名即可;

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\Page;
use easyadmin\app\columns\form\FormText;
use easyadmin\app\libs\ListFilter;
use think\db\Query;

class Category extends \easyadmin\controller\Admin
{

    protected function configListFilter(ListFilter $filter)
    {
        // configListJoin 方法类的别名, 如果是查询的主表, 可不写别名
        $filter->addFilter('c.name', '名称', FormText::class);
    }

    /**
     * 配置关联查询
     * @param Query $query  thinkphp 的 query, 可使用 thinkphp 的数据库查询方法, 这里主要是join 关联数据表
     * @param string $alias 查询主表的别名
     */
    protected function configListJoin(Page $page, Query $query, string $alias)
    {
        // 这里就是 thinkphp 的join用法, 详细可参考 thinkphp 的文档
        // 这里关联 category 表使用的别名是 c ,在列表字段,过滤器字段 同样使用 c 别名即可
        $query->join('category c','c.id='. $alias .'.parent_id');
    }

}

addFilter 方法 参数说明:
字段 说明 类型 必填 默认值
field 字段名称;数据库表的字段,例如:name; 如果是多表关联查询 ,需要写上关联表的别名,例如:user.name ; string
label 字段标题,显示名称 string
fieldClass 渲染字段的类名; 例如是使用 ListText 类渲染本字段,则填写 ListText::class ; 详见预定义字段 string
options 字段的选项; 不同的字段有不同的选项, 详见预定义字段 array
自定义查询

自定义查询,字需要在options中传入filter_callback参数:

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\ListFilter;
use think\db\Query;

class Category extends \easyadmin\controller\Admin
{
    protected function configListFilter(ListFilter $filter)
    {
        $filter->addFilter('name', '名称', FormText::class, [
            /**
             * @param Query $query thinkphp 的查询 query 对象, 可用 thinkphp 的任意查询方法
             * @param string $alias 主表的查询别名,  如果是join的字段, 不要用这个别名,直接用 join 声明的别名
             * @param void $val 用户输入框输入的值
             */
            'filter_callback' => function (Query $query, $alias, $val) {
                //根据自己的业务,判断是否需要空值判断
                if(!empty($val)){
                     $query->where("{$alias}.name", 'like', "%{$val}%"); 
                }
            }
        ]);
    }
}
filter_callback 方法 参数说明:
字段 说明 类型 必填 默认值
query thinkphp 的数据库查询对象, 可用任何thinkphp的查询方法 Query Object
alias 查询主表的别名 select * from table as table_name 中的 table_name string
val 当前用户输入的值 string
搜索结果高亮

顾名思义,就是用户输入的值,如果在结果中出现,就高亮显示它

默认搜索框

搜索结果高亮,字需要在options中传入highlight参数:

不过只有部分字段支持,列表是FormText这种文本类型的就支持, 列表是 select checkbox switch 这种就不支持了

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\ListFilter;

class Category extends \easyadmin\controller\Admin
{
    protected function configListFilter(ListFilter $filter)
    {
        $filter->addFilter('name', '名称', FormText::class, [

            //高亮方式有3种, 默认第一种 ;

            // true 开启高亮, false 关闭高亮
            'highlight' => true,

            //自定义一种颜色值  red blue #f3f ... 等等正确的颜色值都可用,
            'highlight' => 'red',

            // 回调函数处理高亮, 传入用户输入的值
            'highlight' => function ($val) {
                return '' . $val . '';
            },

            // false: 列表中所有包含输入框值的都高亮, 高亮全部字段
            // true: 只是搜索字段对应的列表字段高亮,  高亮一个字段
            'highlight_self'=>false ,
        ]);
    }
}

highlight 可用值

说明
false 关闭高亮
true 默认的高亮, 黄色背景 白色文字
颜色值 直接用指定的颜色显示
匿名函数 自定义函数处理

默认是列表中所有字段都高亮的, 如果仅仅是需要高亮搜索字段,可指定highlight_selftrue

下拉选择类型的搜索
#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\ListFilter;
use easyadmin\app\columns\form\FormSelect;

class Category extends \easyadmin\controller\Admin
{
    protected function configListFilter(ListFilter $filter)
    {
        $filter->addFilter('name', '名称', FormSelect::class, [
            'highlight'=>true,  //是否启用搜索结果高亮
            'options' => [      //下拉选择列表
                ['key'=>'php','text'=>'PHP'],
                ['key'=>'javascript','text'=>'js'],
            ]
        ]);
    }
}
下拉选择类型的搜索
日期范围搜索

展示一个 日期范围选择框,默认用BETWEEN AND搜索; 需要自定义搜索方式,参考自定义查询

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\ListFilter;
use easyadmin\app\columns\form\FormDateTimeRange;

class Category extends \easyadmin\controller\Admin
{
    protected function configListFilter(ListFilter $filter)
    {
        $filter->addFilter('time', '创建时间', FormDateTimeRange::class, [
            'in_format' => function ($val) {  //处理用户输入值的回调, 通常和 format 成对出现
                return strtotime($val);
            },
            'format' => function ($val) {     //处理完的值用什么样的格式输出到界面上, 通常和  in_format 成对出现
                return date('Y-m-d H:i:s',$val);
            }
        ]);
    }
}
下拉选择类型的搜索

      更多字段类型, 详见预定义字段