Skip to content

Latest commit

 

History

History
90 lines (76 loc) · 2.85 KB

manageExtraFields.md

File metadata and controls

90 lines (76 loc) · 2.85 KB

#Manage Extrafields for filter

When you create a filter, sometimes you need to set some specific configuration. To handle this feature events are throw to add fields to your form.

victoire.widget_filter.form.pre_set_data and victoire.widget_filter.form.pre_submit

For example you have a TextFilterType filter:

You have to declare your Event Listener :

    <?php
    namespace MyAwesomeBundle\EventListener;

    use Symfony\Component\Form\FormEvent;
    use Symfony\Component\Form\Extension\Core\Type\TextType
    
    /**
     * This class is an example to add listen on Filter widget form changes.
     */
    class MyTextFilterExtraFieldsEventListener
    {
        /**
         *
         * @param FormEvent $eventArgs
         */
        public function manageExtraFiltersFields(FormEvent $event)
        {
            $data = $event->getData();
            $form = $event->getForm()->getParent();
    
            switch ($data) {
                case TextFilterType:
                    $form->add('defaultValue', TextType::class, array(
                        "data" => "My default value"
                    ));
                    break;
            }
        }
    }

And Add in your services :

    victoire.widget_filter.text_filter.form.listener.presetdata:
        class: MyAwesomeBundle\EventListener\MyTextFilterExtraFieldsEventListener
        arguments:
            - "@doctrine.orm.entity_manager"
        tags:
            - { name: kernel.event_listener, event: victoire.widget_filter.form.pre_set_data, method: manageExtraFiltersFields, priority: 1 }

    victoire.widget_filter.text_filter.form.listener.presubmit:
        class: MyAwesomeBundle\EventListener\MyTextFilterExtraFieldsEventListener
        arguments:
            - "@doctrine.orm.entity_manager"
        tags:
            - { name: kernel.event_listener, event: victoire.widget_filter.form.pre_submit, method: manageExtraFiltersFields, priority: 1 }

You can now for example add your logic in your filter:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        //For the moment default value must be set to request
        if ($this->request->query->has('filter') && array_key_exists('text_filter', $this->request->query->get('filter'))) {
            $this->request->query->replace(
                array(
                    'filter' => array(
                        $this->getName() => array(
                            'title' => $options['widget']->getDefaultValue()
                        ),
                    'listing' => $options['widget']->getListing()->getId()
                    )
                )
            );
        }
        $builder
            ->add(
                'title', TextType::class, array(
                    'data' => $options['widget']->getDefaultValue()
                )
            );
        }
    }