3

我一直试图解决这个问题一个多小时,但我没有取得任何进展......

我有以下表格及其唯一字段:

<?php
$builder
        ->add('cars', 'collection', array(
            'type' => new CarType(),
            //'property_path' => '[cars]',
            'required' => false,
        ))
    ;

此表单接收一个数组,其中一个键“cars”指向一个 Car 对象数组(由 CarType() 处理得很好。

当我将数据设置为此表单时,它给了我一个属性路径解析错误,指出属性路径“[]”无效并且无法解析。请注意,如果我取消注释上面的 property_path 选项,则会出现相同的错误(我只是将其放在那里以显示其默认值)。

  1. 为什么它使用 [] 的属性路径?
  2. 我怎样才能解决这个问题?

注意:这在 PHP 5.4 的一个环境中运行良好,但在我所有的 PHP 5.3 环境中都失败了。

谢谢你的帮助。

更多信息:

异常:“无法解析属性路径“[]”。位置 0 处出现意外标记“[”

在 /vagrant/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyPath.php 第 125 行

4

2 回答 2

3

我有一个类似的问题,并找到了这个解决方法,我会适应你的例子:

我正在使用该表单创建一些新Car对象,因此我的汽车没有 ID。我的Car->getId()方法返回null。当我将getId()方法更改为:

public function getId() {
    return (int) $this->id;
}

问题消失了,因为现在getId()返回 0。大概属性路径[0]是有效的,但[]不是。

于 2013-08-08T18:32:02.480 回答
1

您的返回值getCars()通常不应该是 typearray而是 type Doctrine\Common\Collections\ArrayCollection

property_path指定表单应使用的属性,以获取/将值设置回底层对象。

如果您的字段名称是“汽车”,它已经默认为“汽车”。

请注意,您不必将 property_path 的值包装在[]...


PHP 5.3 不支持[]PHP 5.4 中添加的短数组语法。

为了向后兼容,您必须使用array()语法。

于 2013-06-26T19:52:21.777 回答