过滤器

编辑本页

过滤器

的列表指数页可以使用过滤器,一系列向查询添加条件的表单控件(例如;价格>Enabled = true).属性定义筛选器configureFilters ()你的方法指示板CRUD控制器

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
名称空间应用程序控制器管理使用EasyCorpEasyAdminBundle配置过滤器使用EasyCorpEasyAdminBundle控制器AbstractCrudControllerProductCrudController扩展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
名称空间应用程序控制器管理使用EasyCorpEasyAdminBundle配置过滤器使用EasyCorpEasyAdminBundle控制器AbstractCrudController使用EasyCorpEasyAdminBundle过滤器BooleanFilterProductCrudController扩展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使用学说ORMQueryBuilder使用EasyCorpEasyAdminBundle合同过滤器FilterInterface使用EasyCorpEasyAdminBundleDtoEntityDto使用EasyCorpEasyAdminBundleDtoFieldDto使用EasyCorpEasyAdminBundleDtoFilterDataDto使用EasyCorpEasyAdminBundle过滤器FilterTraitDateCalendarFilter实现了FilterInterface使用FilterTrait公共静态函数(字符串propertyName标签= null)自我返回自我())->setFilterFqcn (__CLASS__进行->setProperty (propertyName->setLabel (标签->setFormType (DateCalendarFilterType::类);}公共函数应用(QueryBuilderqueryBuilder, FilterDataDtofilterDataDto, FieldDtofieldDto, EntityDtoentityDto无效如果“今天”= = =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娱乐下载组件OptionsResolverOptionsResolverDateCalendarFilterType扩展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使用EasyCorpEasyAdminBundle配置过滤器使用EasyCorpEasyAdminBundle控制器AbstractCrudController使用EasyCorpEasyAdminBundle过滤器BooleanFilterUserCrudController扩展AbstractCrudController/ /……公共函数configureFilters(过滤器过滤器过滤器返回过滤器/ /……->add (DateCalendarFilter::“signupDate”));}}

地图上未标明的过滤器

默认情况下,每个筛选器必须与实体的一个属性相关联。然而,有时你需要通过相关实体的属性进行过滤订单客户你想要过滤订单国家的属性客户).在这些情况下,设置映射选项在过滤器中,你会看到一个异常:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
名称空间应用程序控制器管理使用应用程序管理过滤器CustomerCountryFilter使用EasyCorpEasyAdminBundle配置过滤器使用EasyCorpEasyAdminBundle控制器AbstractCrudController使用EasyCorpEasyAdminBundle过滤器BooleanFilterOrderCrudController扩展AbstractCrudController/ /……公共函数configureFilters(过滤器过滤器过滤器返回过滤器// 'country'不作为'Order'的属性存在,所以它是//定义为'not mapped'以避免错误->add (CustomerCountryFilter::“国家”->映射());}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。