过滤器
编辑本页过滤器
的列表指数
页可以使用过滤器,一系列向查询添加条件的表单控件(例如;价格>
,Enabled = true
).属性定义筛选器configureFilters ()
你的方法指示板或CRUD控制器:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
名称空间应用程序\控制器\管理;使用EasyCorp\包\EasyAdminBundle\配置\过滤器;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;类ProductCrudController扩展AbstractCrudController{/ /……公共函数configureFilters(过滤器$过滤器):过滤器{返回$过滤器->add (“标题”)->add (“价格”)->add (“发布”);}}
EasyAdmin为最常见的需求(日期、数值、集合等)提供了现成的过滤器。筛选器的类型是根据属性的数据类型自动选择的,但你也可以显式地定义筛选器类型:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
名称空间应用程序\控制器\管理;使用EasyCorp\包\EasyAdminBundle\配置\过滤器;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;使用EasyCorp\包\EasyAdminBundle\过滤器\BooleanFilter;类ProductCrudController扩展AbstractCrudController{/ /……公共函数configureFilters(过滤器$过滤器):过滤器{返回$过滤器->add (“标题”)->add (“价格”)//大多数时候不需要定义//过滤类型,因为EasyAdmin可以自动猜测->add (BooleanFilter::新(“发布”));}}
内置的过滤器
以下是EasyAdmin提供的内置过滤器:
ArrayFilter
:默认应用于数组字段。它被渲染为<选择>
列出条件(等于/不等于)和另一个<选择>
标签输入引入比较值。BooleanFilter
:默认应用于布尔字段。它呈现为两个单选按钮,分别标记为“是”和“否”。ChoiceFilter
:它被渲染为<选择>
带有选项的列表。ComparisonFilter
:带有两个字段的通用复合过滤器。DatetimeFilter
:默认分别应用于datetime、date或time字段。它被渲染为<选择>
使用条件(before/after/etc)和浏览器原生日期选择器来选择日期/时间。EntityFilter
:适用于与教义关联的领域(支持所有类型)。它被渲染为<选择>
列出条件(等于/不等于/等等)和另一个<选择>
列表以选择比较值。NullFilter
:默认情况下不会应用到任何字段。根据属性的“null”或“not null”值来过滤结果是很有用的。它被呈现为null和not null选项的两个单选按钮。NumericFilter
:默认应用于数值字段。它被渲染为<选择>
列出条件(更高/更低/等于/等)和一个<输入>
定义比较值。TextFilter
:默认应用于字符串/文本字段。它被渲染为<选择>
List包含条件(包含/不包含/等)和一个<输入>
或textarea > <
定义比较值。
自定义过滤器
如果您的需求更具体,您可以创建自己的过滤器。过滤器使用两个类定义:
- 一个配置类实现
EasyCorp
用于配置筛选器选项并在筛选器激活时应用搜索条件;\包 \ EasyAdminBundle \合同 \滤波器 \ FilterInterface - 一个表单类实现
ob娱乐下载Symfony \组件\ \ FormType形式
用于呈现用于在应用程序中输入筛选数据的HTML小部件。
您可以使用FilterTrait
在过滤器配置类中避免实现所有常用方法。这样,您只需要实现应用()
方法,该方法将更改queryBuilder美元
对象应用筛选器所需的查询子句。
考虑下面这个例子,它创建了一个带有一些特殊值的自定义日期过滤器:
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
/ / src /控制器/ Admin /过滤器/ DateCalendarFilter.php名称空间应用程序\控制器\管理\过滤器;使用应用程序\形式\类型\管理\DateCalendarFilterType;使用学说\ORM\QueryBuilder;使用EasyCorp\包\EasyAdminBundle\合同\过滤器\FilterInterface;使用EasyCorp\包\EasyAdminBundle\Dto\EntityDto;使用EasyCorp\包\EasyAdminBundle\Dto\FieldDto;使用EasyCorp\包\EasyAdminBundle\Dto\FilterDataDto;使用EasyCorp\包\EasyAdminBundle\过滤器\FilterTrait;类DateCalendarFilter实现了FilterInterface{使用FilterTrait;公共静态函数新(字符串$propertyName,$标签= null):自我{返回(新自我())->setFilterFqcn (__CLASS__进行)->setProperty ($propertyName)->setLabel ($标签)->setFormType (DateCalendarFilterType::类);}公共函数应用(QueryBuilder$queryBuilder, FilterDataDto$filterDataDto, FieldDto$fieldDto, EntityDto$entityDto):无效{如果(“今天”= = =$filterDataDto->getValue ()) {$queryBuilder->引入(sprintf (' % s。%s =:今天',$filterDataDto->getEntityAlias (),$filterDataDto->getProperty ()))->setParameter (“今天”, (新\ DateTime (“今天”))->格式(“Y-m-d”));}/ /……}}
然后,创建呈现的关联表单类型,例如a<选择>
带有一些预定义值的小部件:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /形式/类型/ Admin / DateCalendarFilterType.php名称空间应用程序\形式\类型\管理;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\ChoiceType;使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;类DateCalendarFilterType扩展AbstractType{公共函数configureOptions(OptionsResolver$解析器){$解析器->setDefaults ([“选择”= > [“今天”= >“今天”,“本月”= >“this_month”,/ /……)));}公共函数getParent(){返回ChoiceType::类;}}
你现在可以在任何仪表板和CRUD控制器中使用这个自定义过滤器:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
名称空间应用程序\控制器\管理;使用应用程序\管理\过滤器\DateCalendarFilter;使用EasyCorp\包\EasyAdminBundle\配置\过滤器;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;使用EasyCorp\包\EasyAdminBundle\过滤器\BooleanFilter;类UserCrudController扩展AbstractCrudController{/ /……公共函数configureFilters(过滤器$过滤器):过滤器{返回$过滤器/ /……->add (DateCalendarFilter::新(“signupDate”));}}
地图上未标明的过滤器
默认情况下,每个筛选器必须与实体的一个属性相关联。然而,有时你需要通过相关实体的属性进行过滤订单
与客户
你想要过滤订单国家
的属性客户
).在这些情况下,设置映射
选项假
在过滤器中,你会看到一个异常:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
名称空间应用程序\控制器\管理;使用应用程序\管理\过滤器\CustomerCountryFilter;使用EasyCorp\包\EasyAdminBundle\配置\过滤器;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;使用EasyCorp\包\EasyAdminBundle\过滤器\BooleanFilter;类OrderCrudController扩展AbstractCrudController{/ /……公共函数configureFilters(过滤器$过滤器):过滤器{返回$过滤器// 'country'不作为'Order'的属性存在,所以它是//定义为'not mapped'以避免错误->add (CustomerCountryFilter::新(“国家”)->映射(假));}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。