Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将Symfony表单单击的按钮映射到数据类_Php_Forms_Symfony - Fatal编程技术网

Php 将Symfony表单单击的按钮映射到数据类

Php 将Symfony表单单击的按钮映射到数据类,php,forms,symfony,Php,Forms,Symfony,我有一个Symfony表单的集合,其中包含多个按钮,我需要确定单击了哪个按钮。我知道可以在按钮元素上调用isClicked()方法,但我想将这个单击的按钮映射到数据类中,这可能吗 我的基本表格: $builder->add( 'items', 'collection', [ 'type' => new ItemForm(), 'label' => FALSE,

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

我的基本表格:

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

    $builder->add(
        'isRemoved',
        'submit'
    );
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;
    }
}
项目表单的数据类

    $builder->add(
        'isRemoved',
        'submit'
    );
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。

彼得

我不确定你能不能那样做

在我看来,您可以简单地执行以下操作:

在表单中创建隐藏字段:

$builder->...
        ->add('isRemoved', 'hidden')
        ->...;
在模板中,只需简单渲染即可:

{{ form_rest(form) }}
并将其字段设置为JS:

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

或者使用按钮点击事件。

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

    $builder->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) {
            $formData = $event->getData();
            $form = $event->getForm();

            if ($form['isRemoved']->isClicked()) {
                $formData->setIsRemoved(TRUE);
            }
        }
    );