samson / filter-bundle
此包的最新版本(4.0.1)没有可用的许可信息。
4.0.1
2016-07-04 09:20 UTC
Requires
README
步骤1: 你的FilterData对象
Filterparams定义在FilterData对象中,它是一个POPO
namespace Foo\Bar\Form\Filter; use Samson\FilterBundle\Filter\Search as Filter; class CompanyFilter { /** * @Filter\IntegerFieldSearch(propertyPath="id") */ private $id; /** * @Filter\StringFieldSearch() */ private $name; public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } }
请注意使用声明
选项(所有)
- propertyPath(过滤属性的路径,例如:"person.lastName"。它是可选的,默认情况下它采用变量的名称)
- propertyPaths(与propertyPath相同,但用于集合。例如:"addresses.city"以在Addresses集合中找到城市名称)
StringFieldSearch
选项(默认:type)
- type('contains','begins_with','ends_with','equals')
IntegerFieldSearch
选项(默认:type)
- type('equals'/'=','is less than'/'<','is less than or equal to'/'<=','is greater than'/'>','is greater than or equal to'/'>=','is not equal to'/'<>')
步骤2: FilterType(表单)
定义一个表单来连接你的FilterData对象。
namespace Foo\Bar\Form\Filter; use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\AbstractType; class CompanyFilterType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder ->add('id', null, array('required'=>false)) ->add('name', null, array('required'=>false)) ; } public function getName() { return 'company_filter'; } public function getDefaultOptions(array $options) { return array( 'data_class' => 'Foo\Bar\Form\Filter\CompanyFilter' ); } }
请注意data_class选项。这是必需的,否则无法存储值
步骤3: 在你的控制器中使用
创建一个类似于其他表单的表单
$filter = $this->createForm('filter', null, array( 'filter_type' => new CompanyFilterType(), 'filter_data' => new CompanyFilter() ));
创建你将用于获取过滤实体的QueryBuilder
$qb = $em->getRepository('FooBundle:Company')->createQueryBuilder('b')->orderBy('b.id'); $this->get('samson.filter')->bindAndfilter($this->getRequest(), $filter, $qb);
步骤4: 创建你的视图
在Twig模板中创建你的表单视图。不需要提交按钮。
<form action="{{ path('company') }}" method="post" {{ form_enctype(filter) }}> {{ form_widget(filter) }} </form>
像这样覆盖你的Filter的内部部分
{% block company_filter_widget %}
<table>
{% for field in form %}
{{ form_row(field) }}
{% endfor %}
</table>
{% endblock %}