Skip to content

Commit

Permalink
Merge pull request Sylius#7835 from mvar/grid_filter_docs
Browse files Browse the repository at this point in the history
Update Grid filter usage examples
  • Loading branch information
pjedrzejewski committed Mar 28, 2017
2 parents 3a997f3 + c6809dd commit e6000f6
Showing 1 changed file with 20 additions and 41 deletions.
61 changes: 20 additions & 41 deletions docs/bundles/SyliusGridBundle/custom_filter.rst
Expand Up @@ -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:
Expand All @@ -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:
Expand All @@ -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!

Expand All @@ -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'

0 comments on commit e6000f6

Please sign in to comment.