是否需要取决于一个字段 - 嵌入式表格Symfony2

时间:2014-12-21 16:04:59

标签: php jquery html5 forms symfony

我正在做一个论坛捆绑,您可以在其中添加(或不添加)对您的主题的投票。 问题是只有在布尔值为真时才需要嵌入式表单(问题和答案)。

我首先尝试了一些我在互联网上找到的解决方案,但没有任何效果。 然后我创建了两个表单,一个有投票,另一个没有,我用一些JQuery创建了一个小开关。

问题在于,当我想要创建一个主题并且只填写一个表单时,HTML5告诉我有必填字段我没有填写另一个表单,它不会只发送表单I& #39;我试图提交,它显然提交了两者。

您知道为什么以及如何解决这个问题,或者可能是一种更简单的技术来动态定义是否需要字段?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的方法,所以就是这样:

  • 我将嵌入表单的 FormType 添加为必需的错误
  • 我添加 PRE_SUBMIT ,检查用户是否要添加投票
  • 如果不是我删除发送到我的控制器的数据(问题)

事实上,问题产生了问题,因为它是与我的主题相关联的OneToOne,这意味着我无法添加选项allow_delete(就像我为答案所做的那样)。 这是我的错误:

  

通过这种关系找到了一个新实体' ...'未配置为对实体级联持久化操作:...要解决此问题:在此未知实体上显式调用EntityManager#persist()或在映射中配置级联持久化此关联,例如@ManyToOne(..,cascade = {"坚持"})。如果你无法找出导致问题实施的实体,那么......'得到一个线索。

对于那些想要了解我如何在此处添加活动的人来说,这是一个简单的代码(highly inspired from the doc):

buildForm方法中:

->addEventListener(FormEvents::PRE_SUBMIT, array($this, 'onPreSubmit'))    

然后您创建另一种方法

public function onPreSubmit(FormEvent $event)
{
    $data = $event->getData();
    $form = $event->getForm();
    if($data['vote'])
    {
    }
    else
    {
        unset($data['question']);
        $event->setData($data);
    }
}