Bonjour,

J'utilise le bundle LexikFormFilter qui permet de proposer un formulaire qui filtre une liste. Ca marche bien jusqu'ici sauf que j'ai voulu l'utiliser dans le cadre d'un formulaire imbriqué et la j'ai une erreur. Ils ont pourtant une section à ce sujet dans la documentation, c'est donc que c est bien traité.

https://github.com/lexik/LexikFormFi...deding-filters

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
<?php
 
namespace Project\Bundle\SuperBundle\Filter;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type as Filters;
 
/**
 * Embed filter type.
 */
class OptionsFilterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('label', Filters\TextFilterType::class);
        $builder->add('color', Filters\TextFilterType::class);
    }
 
    public function getBlockPrefix()
    {
        return 'options_filter';
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
 
<?php
 
namespace Project\Bundle\SuperBundle\Filter;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\QueryBuilder;
use Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderExecuterInterface;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type as Filters;
 
class ItemFilterType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name', Filters\TextFilterType::class);
        $builder->add('rank', Filters\NumberFilterType::class);
 
        $builder->add('options', Filters\CollectionAdapterFilterType::class, array(
            'type'       => new OptionsFilterType(),
            'add_shared' => function (FilterBuilderExecuterInterface $qbe)  {
                $closure = function (QueryBuilder $filterBuilder, $alias, $joinAlias, Expr $expr) {
                    // add the join clause to the doctrine query builder
                    // the where clause for the label and color fields will be added automatically with the right alias later by the Lexik\Filter\QueryBuilderUpdater
                    $filterBuilder->leftJoin($alias . '.options', $joinAlias);
                };
 
                // then use the query builder executor to define the join and its alias.
                $qbe->addOnce($qbe->getAlias().'.options', 'opt', $closure);
            },
        ));
    }
 
    public function getBlockPrefix()
    {
        return 'item_filter';
    }
}
J'ai une erreur pour le code " 'type' => new OptionsFilterType(), " dans la seconde partie du code.

The option "type" does not exist. Defined options are: "action", "add_shared", "allow_extra_fields", "apply_filter", "attr", "auto_initialize", "block_name", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "data_extraction_method", "default_data", "disabled", "empty_data", "entry_options", "entry_type", "error_bubbling", "error_mapping", "extra_fields_message", "filter_condition_builder", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups".
Si vous avez déjà utilisé ce bundle dans ce cadre et que vous avez un bout de code ou si vous comprenez l'origine de l'erreur cela serait super.

Merci !