必填与否取决于一个字段 - 嵌入式表单 Symfony2


Required or not depending on one field - Embedded forms Symfony2

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

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

问题是,当我想创建一个主题并且只填写一个表单时,HTML5 告诉我有一些字段是必需的,我没有填写另一个表单,它不仅发送我尝试提交的表单,它显然同时提交两个。

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

提前感谢!

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

  • 根据需要添加嵌入表单的表单类型 false
  • 我添加了一个PRE_SUBMIT,用于检查用户是否要添加投票
  • 如果没有,我删除发送到我的控制器的数据(问题(

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

通过关系"..."找到了新实体未配置为级联实体的持久操作:...要解决此问题:在此未知实体上显式调用 EntityManager#persist((,或者配置级联在映射中保留此关联,例如 @ManyToOne(..,cascade={"persist"}(。如果无法找出导致问题的实体,请实施"..."以获得线索。

对于那些想看看我如何添加事件的人,这里有一个简单的代码(深受文档的启发(:

构建窗体方法中:

->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);
    }
}