【问题标题】:Map Symfony form clicked button to data class将 Symfony 表单单击按钮映射到数据类
【发布时间】:2016-01-14 15:01:04
【问题描述】:

我有一个带有多个按钮的 Symfony 表单集合,我需要确定单击了哪个按钮。我知道可以在该按钮元素上调用isClicked() 方法,但我想将此单击的按钮映射到数据类中,这可能吗?

我的基本形式:

    $builder->add(
        'items',
        'collection',
        [
            'type' => new ItemForm(),
            'label' => FALSE,
        ]
    );

ItemForm:

    $builder->add(
        'isRemoved',
        'submit'
    );

ItemForm 的数据类:

class ItemFormData
{
    /**
     * @var bool
     */
    private $isRemoved = FALSE;

    /**
     * @return boolean
     */
    public function isIsRemoved()
    {
        return $this->isRemoved;
    }

    /**
     * @param boolean $isRemoved
     */
    public function setIsRemoved($isRemoved)
    {
        $this->isRemoved = $isRemoved;
    }
}

如果单击了相应的按钮,我需要将 TRUE 映射到 isRemoved 属性。我正在使用 Symfony 2.7。

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    实际上,我已经找到了解决方案。使用表单事件可以轻松完成:

        $builder->addEventListener(
            FormEvents::POST_SUBMIT,
            function (FormEvent $event) {
                $formData = $event->getData();
                $form = $event->getForm();
    
                if ($form['isRemoved']->isClicked()) {
                    $formData->setIsRemoved(TRUE);
                }
            }
        );
    

    【讨论】:

      【解决方案2】:

      彼得。

      我不确定你是否可以这样做。

      IMO 你可以简单地做这样的事情:

      在表单中创建隐藏字段:

      $builder->...
              ->add('isRemoved', 'hidden')
              ->...;
      

      在模板中只是简单地渲染它:

      {{ form_rest(form) }}
      

      并用 JS 设置它的字段:

      $('#<form_selector>').on('submit', function () {
          $('#<is_removed_vields_selector>').val();
      });
      

      或者在按钮点击事件上使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-04
        • 2011-08-01
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 2012-12-03
        相关资源
        最近更新 更多