【问题标题】:empty elements in symfony form collectionsymfony 表单集合中的空元素
【发布时间】:2015-05-13 15:21:50
【问题描述】:

我有一个包含项目集合的简单表单。就像这里描述的一样: http://symfony.com/doc/current/cookbook/form/form_collections.html.

问题是当我添加新元素(或多个元素)而不触及其中的任何内容(不更改他们的输入)时,我得到一个空集合。

我想获得一个添加元素的集合,而不管它们的内容。即使有字段是空的也可以。

在我提交表单后,我有:

var_dump($request->get('my_form_name'));

/* dump result: 
array (size=19)
   ...
   'partners' => 
    array (size=1)
        0 => 
          array (size=2)
            'fullname' => string '' (length=2)
            'manager' => string '' (length=0)
   ...
*/

var_dump($form->getData()->getPartners()); 
// EMPTY!!! WTF? I expect an array of 1 element of Partner class which fields are set to '' and ''

另一方面,如果设置了一些东西,那就没问题了:

var_dump($request->get('my_form_name'));

/* dump result: 
array (size=19)
   ...
   'partners' => 
    array (size=1)
        0 => 
          array (size=2)
            'fullname' => string ' NAME HERE ' (length=2)
            'manager' => string '' (length=0)
   ...
*/

var_dump($form->getData()->getPartners()); 
// ok, we have an array of 1 element which is an object of Partner class

任何想法如何摆脱这个错误?


更新

合作伙伴的类映射为:

Bundle\Entity\Partner:
  ...
  fields:
    fullname: 
      type: string
      lenght: 255
      nullable: True
    manager: 
      type: string
      lenght: 255
      nullable: True
  manyToOne:
    owner:
      targetEntity: Step2
      inversedBy: partners
      joinColumn:
        name: owner_id
        referencedColumnName: id

字段partners 被添加到collectioncollection 实体的表单中,其中allow_addallow_deleteby_reference 设置为false

【问题讨论】:

  • 您是否将“合作伙伴”类与您的表单相关联?如果是,您的“合作伙伴”实体类的“全名”属性上有哪些注释?
  • 我更新了我的问题以提供更多信息
  • 你能显示你的表单代码吗?看起来您设置了 mapped => false 选项。
  • 请提供生成表单的代码。

标签: php forms symfony


【解决方案1】:

您需要将第二个参数作为false 传递给submit() 方法。它会告诉表单组件提交的空数据不能更改任何现有数据。

$form->submit($request->get('my_form_name'), false);

【讨论】:

  • 这应该可以。我不知道这个submit 的第二个参数。通常我使用handleRequest。我想没有办法仍然使用handleRequest
  • 没有。您需要改用提交。 handleRequest() 只需调用 submit() 并使用从请求中收到的数据。
【解决方案2】:

好的,我发现了一个问题。

我必须在子表单(Partner 类)中设置empty_data


我不明白为什么,但是当相关类(Partners)的所有字段都提交为""(空)然后在类Symfony\Component\Form\Form的方法sumbit

            if (FormUtil::isEmpty($viewData)) {
                $emptyData = $this->config->getEmptyData();

                if ($emptyData instanceof \Closure) {
                    /* @var \Closure $emptyData */
                    $emptyData = $emptyData($this, $viewData);
                }

                $viewData = $emptyData;
            }

在$viewData 中为空字段的合作伙伴 提供null。对于提交为 Partner 且至少有一个字段不为空的对象$viewData 是需要对象。


这都是因为

$this->config->getEmptyData() 

对于空对象是Closure,最终结果为null,但对于至少有一个字段不为空的Partner,它给出了直接需要的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多