【问题标题】:Required or not depending on one field - Embedded forms Symfony2是否需要取决于一个字段 - 嵌入式表单 Symfony2
【发布时间】:2014-12-21 16:04:59
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

  • 您是否尝试过此处列出的允许您根据提交的数据动态修改表单的建议? symfony.com/doc/current/cookbook/form/…
  • 重点是我在创建表单之前不提交任何东西。 :( 我希望同时填写和提交整个表格。
  • 我不明白 - 您在创建自己的帖子时是否设置了投票真/假标志?或者它就像,每一个回复?我想我不明白你正在尝试的流程。
  • 我以一种形式发送: *真/假标志 *标题+内容 *如果为真,则投票!

标签: php jquery html forms symfony


【解决方案1】:

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

  • 我将嵌入表单的 FormType 添加为 required false
  • 我添加了一个 PRE_SUBMIT 来检查用户是否想要添加投票
  • 如果不是,我删除发送给我的控制器的数据(问题)

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

通过关系“...”找到了一个新实体,该实体未配置为对实体进行级联持久化操作:... 解决此问题:在此未知实体上显式调用 EntityManager#persist() 或配置级联将此关联保留在映射中,例如 @ManyToOne(..,cascade={"persist"})。如果您无法找出导致问题的实体,请执行“...”以获取线索。

对于那些想看看我如何在此处添加事件的人,这里有一个简单的代码 (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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2014-11-08
    • 2018-07-31
    • 2016-03-01
    • 2013-01-29
    相关资源
    最近更新 更多