samson/filter-bundle

此包的最新版本(4.0.1)没有可用的许可信息。

4.0.1 2016-07-04 09:20 UTC

This package is auto-updated.

Last update: 2024-09-20 21:00:02 UTC


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 %}