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

Pet*_*jci 3 php forms symfony

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

我的基本形式:

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

ItemForm

    $builder->add(
        'isRemoved',
        'submit'
    );
Run Code Online (Sandbox Code Playgroud)

和数据类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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*jci 5

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

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

            if ($form['isRemoved']->isClicked()) {
                $formData->setIsRemoved(TRUE);
            }
        }
    );
Run Code Online (Sandbox Code Playgroud)