过滤器
编辑该页面过滤器
的清单指数
页面可以精炼过滤器,一系列表单控件,添加条件查询(如。价格> 10
,启用= true
)。定义你的过滤器configureFilters ()
你的方法指示板或CRUD控制器:
1 2 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提供现成的过滤器最常见的需求(日期、数值、收藏等)。过滤器的类型自动选择基于属性的数据类型,但是你也可以显式地定义过滤器类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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,日期和时间字段。它的呈现<选择>
列表的条件(前/后/等等)和一个浏览器本地datepicker选择日期/时间。EntityFilter
:用于字段与教义协会(各种支持)。它的呈现<选择>
列表的条件(平等不等于/等等)<选择>
列表中选择比较值。NullFilter
:这不是默认情况下适用于任何领域。是有用的过滤结果根据“零”或“不空”属性的价值。呈现为两个单选按钮为零和not null选项。NumericFilter
:应用默认数值字段。它的呈现<选择>
列表的条件(高/低/等于/等等)和一个<输入>
定义的比较值。TextFilter
:应用默认字符串/文本字段。它的呈现<选择>
列表的条件(包含/不包含/等等)和一个<输入>
或textarea > <
定义的比较值。
自定义过滤器
如果你需要更具体,您可以创建您自己的过滤器。定义一个过滤器使用两个类:
- 一个配置类实现
EasyCorp
用于配置过滤器选项和应用过滤器时的搜索条件是活跃的;\包 \ EasyAdminBundle \合同 \滤波器 \ FilterInterface - 一个表单类实现
ob娱乐下载Symfony \组件\ \ FormType形式
是用于呈现HTML小部件用于在应用程序中输入过滤数据。
您可以使用FilterTrait
在你的过滤器配置类来避免实施所有的一般方法。这样你只需要实现应用()
方法,它改变了queryBuilder美元
对象应用查询条款所需的过滤器。
考虑一下这个例子,创建一个自定义日期过滤与一些特殊的值:
1 2 3 4 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”));}/ /……}}
然后,创建相关的表单,它显示例如一个类型<选择>
小部件和一些预定义的值:
1 2 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控制器:
1 2 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”));}}
地图上未标明的过滤器
默认情况下,每个过滤器都必须与该实体的属性。然而,有时你需要过滤的财产(如一个相关的实体订单
与一个客户
你想过滤订单的国家
财产的客户
)。在这些情况下,设置映射
选项假
在过滤器或你会看到一个异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
名称空间应用程序\控制器\管理;使用应用程序\管理\过滤器\CustomerCountryFilter;使用EasyCorp\包\EasyAdminBundle\配置\过滤器;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;使用EasyCorp\包\EasyAdminBundle\过滤器\BooleanFilter;类OrderCrudController扩展AbstractCrudController{/ /……公共函数configureFilters(过滤器美元过滤器):过滤器{返回美元过滤器/ /“国家”不存在的属性的“秩序”/ /定义为“不映射”,以避免错误- >add (CustomerCountryFilter::新(“国家”)- >映射(假));}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。