【问题标题】:Symfony2 FormBuilder order fields added by EventListener由 EventListener 添加的 Symfony2 FormBuilder 订单字段
【发布时间】:2014-08-21 10:40:24
【问题描述】:

我试图仅在创建新条目时显示一些表单字段。我在 symfony 食谱中使用 this article 来做到这一点。问题是,由 EventListener 添加的字段进入表单底部(我的真实表单包含更多字段)。所以我得到field2,field3,field1。不修改模板,如何将此字段移到顶部?

 public function buildForm(FormBuilderInterface $builder, array $options)
 {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
            $task = $event->getData();
            $form = $event->getForm();

            //add just for new entity
            if (!$task || null === $task->getId()) {
                 $form->add('field1', null);
            }

        });     

        $builder->add('field2', null);
        $builder->add('field3', null);  
    }

【问题讨论】:

标签: php forms symfony event-listener formbuilder


【解决方案1】:

只需在表单构建器中为该字段保留位置,例如使用隐藏输入。事件监听器会覆盖这个字段。

$builder->add('field1', 'hidden');
$builder->add('field2', null);
$builder->add('field3', null);

【讨论】:

    【解决方案2】:

    正如 Qoop 提到的,Symfony 中没有这样的功能,但是有一个bundle for it

    使用此捆绑包的简单解决方案:

     public function buildForm(FormBuilderInterface $builder, array $options)
     {
            $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
                $task = $event->getData();
                $form = $event->getForm();
    
                //add just for new entity
                if (!$task || null === $task->getId()) {
                     $form->add('field1', null, array('position' => 'first'));
                }
    
            });     
    
            $builder->add('field2', null);
            $builder->add('field3', null);  
     }
    

    还有更多订购功能,请查看bundles's documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多