我一直试图解决这个问题超过一个小时,我没有取得任何进展......
我有以下表格,也是唯一的字段:
<?php
$builder
->add('cars', 'collection', array(
'type' => new CarType(),
//'property_path' => '[cars]',
'required' => false,
))
;
此表单接收一个数组,其中一个键“cars”指向Car对象数组(由CarType()处理得很好。
当我将数据设置为此表单时,它会给我一个属性路径解析错误,指出属性路径“[]”无效且无法解析。请注意,如果我取消注释上面的property_path选项,则会出现相同的错误(我只是将其显示为默认值)。
注意:这在PHP 5.4的一个环境中工作正常,在我所有的PHP 5.3环境中都失败。
感谢您的帮助。
更多信息:
异常:“无法解析属性路径”[]“。意外的标记”[位于0位置“
在第125行的/vagrant/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyPath.php
答案 0 :(得分:2)
我遇到了类似的问题,并找到了解决方法,我将适应您的示例:
我正在使用该表单创建一些新的Car
对象,因此我的车没有ID。我的Car->getId()
方法返回null
。当我将getId()
方法更改为:
public function getId() {
return (int) $this->id;
}
问题消失了,因为现在getId()
返回0.推测属性路径[0]
有效,但[]
不是。
答案 1 :(得分:1)
getCars()
的返回值通常不应为array
类型,而应为Doctrine\Common\Collections\ArrayCollection
类型。
property_path指定表单将使用的属性来获取/设置值回到底层对象。
如果您的字段名称是“汽车”,则它将默认为“汽车”。
请注意,您不必在[]
...中包装property_path的值...
PHP 5.3不支持PHP 5.4中添加的短数组语法[]
。
为了向后兼容,您必须使用array()
语法。