“集合”表单上的Symfony2属性路径解析错误

时间:2013-06-26 19:46:07

标签: symfony

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

我有以下表格,也是唯一的字段:

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

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

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

  1. 为什么使用[]?
  2. 的属性路径
  3. 我该如何解决这个问题?
  4. 注意:这在PHP 5.4的一个环境中工作正常,在我所有的PHP 5.3环境中都失败。

    感谢您的帮助。

    更多信息:

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

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

2 个答案:

答案 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()语法。