From c6809ddc1f7458e89bac85c4dcdfc19adc43c70e Mon Sep 17 00:00:00 2001 From: Mantas Varatiejus Date: Mon, 27 Mar 2017 10:39:42 +0300 Subject: [PATCH] Update Grid filter usage examples --- .../SyliusGridBundle/custom_filter.rst | 61 ++++++------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/docs/bundles/SyliusGridBundle/custom_filter.rst b/docs/bundles/SyliusGridBundle/custom_filter.rst index aeca71e054e..38563f0b1b7 100644 --- a/docs/bundles/SyliusGridBundle/custom_filter.rst +++ b/docs/bundles/SyliusGridBundle/custom_filter.rst @@ -13,34 +13,16 @@ To add a new filter, we need to create an appropriate class and form type. use Sylius\Component\Grid\Data\DataSourceInterface; use Sylius\Component\Grid\Filtering\FilterInterface; - use Symfony\Component\OptionsResolver\OptionsResolver; class SuppliersStatisticsFilter implements FilterInterface { - public function apply(DataSourceInterface $dataSource, $name, $data, array $options = array()) + public function apply(DataSourceInterface $dataSource, $name, $data, array $options = []) { // Your filtering logic. DataSource is kind of query builder. // $data['stats'] contains the submitted value! // here is an example $dataSource->restrict($dataSource->getExpressionBuilder()->equal('stats', $data['stats'])); } - - public function setOptions(OptionsResolver $resolver) - { - $resolver - ->setDefaults(array( - 'range' => array(0, 10) - )) - ->setAllowedTypes(array( - 'range' => array('array') - )) - ; - } - - public function getType() - { - return 'supplier_statistics'; - } } And the form type: @@ -51,33 +33,31 @@ And the form type: namespace AppBundle\Form\Type\Filter; - use Sylius\Component\Grid\Data\DataSourceInterface; - use Sylius\Component\Grid\Filter\FilterInterface; + use Symfony\Component\Form\AbstractType; + use Symfony\Component\Form\Extension\Core\Type\ChoiceType; + use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; - class TournamentStatisticsFilterType extends AbstractType + class SuppliersStatisticsFilterType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->add('stats', 'choice', array('choices' => range($options['range'][0], $options['range'][1]))); + $builder->add( + 'stats', + ChoiceType:class, + ['choices' => range($options['range'][0], $options['range'][1])] + ); } public function configureOptions(OptionsResolver $resolver) { $resolver - ->setDefaults(array( - 'range' => array(0, 10) - )) - ->setAllowedTypes(array( - 'range' => array('array') - )) + ->setDefaults([ + 'range' => [0, 10], + ]) + ->setAllowedTypes('range', ['array']) ; } - - public function getName() - { - return 'sylius_grid_filter_tournament_statistics'; // The name is important to be sylius_grid_filter_NAME - } } Create a template for the filter, similar to the existing ones: @@ -99,11 +79,10 @@ That is all. Now let's register your new filter type as service. app.grid.filter.suppliers_statistics: class: AppBundle\Grid\Filter\SuppliersStatisticsFilter tags: - - { name: sylius.grid_filter, type: suppliers_statistics } - app.form.type.grid.filter.suppliers_statistics: - class: AppBundle\Form\Type\Filter\SuppliersStatisticsFilterType - tags: - - { name: form.type, alias: sylius_grid_filter_suppliers_statistics } + - + name: sylius.grid_filter + type: suppliers_statistics + form-type: AppBundle\Form\Type\Filter\SuppliersStatisticsFilterType Now you can use your new filter type in the grid configuration! @@ -116,9 +95,9 @@ Now you can use your new filter type in the grid configuration! resource: app.tournament filters: stats: - type: tournament_statistics + type: suppliers_statistics options: range: [0, 100] templates: filter: - suppliers_statistics: "AppBundle:Grid/Filter:suppliers_statistics.html.twig" + suppliers_statistics: 'AppBundle:Grid/Filter:suppliers_statistics.html.twig'