向 Symfony3 中动态添加的字段添加事件侦听器

萨布拉

我正在使用事件侦听器来动态修改表单。我想向第二个字段添加另一个事件侦听器。我试过这段代码,但没有用:

public function buildForm(FormBuilderInterface $builder, array $options)
{

       $builder
        ->add('Marque',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Marque',
            'placeholder'   => '-- Choississez une marque --',
            //'mapped'    =>  false
        ))
        ->add('Modele',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Modele',
            'placeholder'   => '-- Choississez un modèle --',
            //'mapped'    =>  false
        ))
        ->add('nom',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Type',
            'placeholder'   => '-- Choississez une type --',
            //'mapped'    =>  false
        ))
    ;

    $formModifierM = function (FormInterface $form, Marque $marque = null) {

        $modeles = null === $marque ? array() : $marque->getAvailableModeles(); // only in a bidirectional relationship
        $placeholder = empty($modeles) ? '-- Choississez un modèle  --' : '';
        $form->add('Modele',  EntityType::class, array(
            'class' =>  'EK\PlateformeBundle\Entity\Modele',
            'placeholder'   => $placeholder,
            'choices' => $modeles,
        ))
            ->add('Rechercher',  SubmitType::class) ;

    };

    $formModifierModele = function (FormInterface $form, Modele $modele = null) {

        $types = null === $modele ? array() : $modele->getAvailableTypes(); // only in a bidirectional relationship
        $placeholder = empty($types) ? '-- Choississez un type  --' : '';
        $form->add('nom',  EntityType::class, array(
            'class' =>  'EK\PlateformeBundle\Entity\Type',
            'placeholder'   => $placeholder,
            'choices' => $types,
        ))
            ->add('Rechercher',  SubmitType::class) ;

    };


    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function(FormEvent $event) use ($formModifierM ,$formModifierModele){
            $form = $event->getForm();
            $formModifierM($form, null);
            $formModifierModele($form, null);
        }
    );

    $builder->get('Marque')->addEventListener(
        FormEvents::POST_SUBMIT,
        function(FormEvent $event) use ($formModifierM) {

            $form = $event->getForm()->getParent();
            $marque = $event->getForm()->getData();
            // since we've added the listener to the child, we'll have to pass on
            // the parent to the callback functions!
            $formModifierM($form, $marque);
        }

    );


    $builder->get('Modele')->addEventListener( // this code did'nt work 
        FormEvents::POST_SUBMIT,
        function(FormEvent $event) use ($formModifierModele) {

            $form = $event->getForm()->getParent();
            $modele = $event->getForm()->getData();
            $formModifierModele($form, $modele); 
        }
    );

}

我没有找到任何解决此问题的方法。请任何人都可以帮助我。我发现了同样的问题,但它对我不起作用How to add an Event Listener to a dynamic added field using Symfony Forms

萨布拉

我解决了我的问题。这是我的工作代码:POST_SUBMIT必须替换为PRE_SUBMIT

 public function buildForm(FormBuilderInterface $builder, array $options)
{

        /** @var \Doctrine\ORM\EntityManager $em */
       $em = $options['entity_manager'];

       $builder
        ->add('Marque',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Marque',
            'placeholder'   => '-- Choississez une marque --',
             'required' => false,
            //'mapped'    =>  false
        ))
        ->add('Modele',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Modele',
            'placeholder'   => '-- Choississez un modèle --',
             'required' => false,
            //'mapped'    =>  false
        ))
        ->add('nom',   EntityType::class, array(
            'class'     =>  'EK\PlateformeBundle\Entity\Type',
            'placeholder'   => '-- Choississez une type --',
             'required' => false,
            //'mapped'    =>  false
        ))
    ;

    $formModifierM = function (FormInterface $form, Marque $marque = null) {

        $modeles = null === $marque ? array() : $marque->getAvailableModeles(); // only in a bidirectional relationship
        $placeholder = empty($modeles) ? '-- Choississez un modèle  --' : '';
        $form->add('Modele',  EntityType::class, array(
            'class' =>  'EK\PlateformeBundle\Entity\Modele',
            'placeholder'   => $placeholder,
             'required' => false,
            'choices' => $modeles,
        ))
            ->add('Rechercher',  SubmitType::class) ;

    };

    $formModifierModele = function (FormInterface $form, Modele $modele = null) {

        $types = null === $modele ? array() : $modele->getAvailableTypes(); // only in a bidirectional relationship
        $placeholder = empty($types) ? '-- Choississez un type  --' : '';
        $form->add('nom',  EntityType::class, array(
            'class' =>  'EK\PlateformeBundle\Entity\Type',
            'placeholder'   => $placeholder,
             'required' => false,
            'choices' => $types,
        ))
            ->add('Rechercher',  SubmitType::class) ;

    };


    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function(FormEvent $event) use ($formModifierM ,$formModifierModele){
            $form = $event->getForm();
            $formModifierM($form, null);
            $formModifierModele($form, null);
        }
    );

   $builder->addEventListener(
        FormEvents::PRE_SUBMIT,
        function(FormEvent $event) use ($formModifierM ,$formModifierModele ,  $em) {
            $form = $event->getForm();
            $data = $event->getData();
           if (!isset($data['Modele']) || empty($data['Modele']))
           {

            $marque_id = $data['Marque'];
            $marque   = $em->getRepository("EK\PlateformeBundle\Entity\Marque")->find($marque_id);
            $formModifierM($form, $marque);
          }
          else
          {
              $modele_id = $data['Modele'];      
              $modele   = $em->getRepository("EK\PlateformeBundle\Entity\Modele")->find($modele_id);
              $formModifierModele($form, $modele);
          }

        }

    );



}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Javascript中向对象添加事件侦听器

来自分类Dev

使用 Symfony3 和 XML 向列添加 MySQL 索引

来自分类Dev

如何向原型内动态创建的元素添加事件侦听器?

来自分类Dev

Symfony3获取事件侦听器中非映射字段的值

来自分类Dev

如何在Android中的customAdapter上向按钮动态添加侦听器

来自分类Dev

向帧中的光标侦听器添加延迟

来自分类Dev

如何向 ReactJs 中的对象数组添加侦听器

来自分类Dev

如何从外部控制器向事件添加事件侦听器?

来自分类Dev

向匿名元素添加伪元素和光标样式以及事件侦听器

来自分类Dev

向匿名元素添加伪元素和光标样式以及事件侦听器

来自分类Dev

向Keystone模型添加.post()事件侦听器时,isNew属性始终返回false

来自分类Dev

如何向原型 Ajax 请求添加进度事件侦听器?

来自分类Dev

无法使用 JQuery 向克隆元素添加事件侦听器 - 用于 CSS 动画

来自分类Dev

是否可以向QCheckBox添加onclick侦听器?

来自分类Dev

Symfony3 QueryBuilder orderBy 实体字段

来自分类Dev

Symfony3仅在添加对象时验证字段

来自分类Dev

Symfony3审计控制器

来自分类Dev

在命令Symfony3中设置详细

来自分类Dev

在symfony3中使用ckeditor

来自分类Dev

在命令Symfony3中设置详细

来自分类Dev

在symfony3中使用ckeditor

来自分类Dev

向类中的所有元素添加唯一的侦听器

来自分类Dev

如何以编程方式在预制件中向 UnityEvent 添加侦听器

来自分类Dev

Symfony3 在深层链接中添加语言环境

来自分类Dev

如何在 symfony3 中添加元标记?

来自分类Dev

D3 - 向条形添加事件

来自分类Dev

在Phaser3中向SVG元素添加事件

来自分类Dev

向 Symfony 系统添加需求

来自分类Dev

symfony3教义2关联计数器字段

Related 相关文章

热门标签

归档