Symfony2 - NoSuchPropertyException

时间:2013-11-21 17:03:21

标签: exception symfony properties

我有以下代码设置:

窗体/ CompanyType:

    ->add('employeeCollection', 'entity', array(
        'class' => 'xyBundle:Person',
        'property' => 'name',
        'by_reference' => false
    ))

实体/公司:

/**
 * @ORM\ManyToMany(targetEntity="Person", inversedBy="employmentCollection")
 */
private $employeeCollection;

public function addEmployeeCollection(Person $employee) {
    return $this->addEmployee($employee);
}

实体/人:

/**
 * @ORM\ManyToMany(targetEntity="Company", mappedBy="employeeCollection")
 */
private $employmentCollection;

由于Symfony2的最新更新,我在编辑公司并尝试更新时遇到新错误。 (在最新的Symonfy2更新之前,一切正常)。

奇怪的是方法和属性的组合(员工获得雇佣):

Neither the property "employeeCollection" nor one of the methods "addEmployooCollection()", "setEmployeeCollection()", "__set()" or "__call()" exist and have public access in class "xyBundle\Entity\Company". 

1 个答案:

答案 0 :(得分:2)

如果有人有同样的错误,我发现了问题。

Symfony2有一个PropertyAccessor,它检查给定的属性名是否为数组。如果是,则检查给定的setter或adder / remover是否可用。

PropertyAccessor使用StringUtil(一个帮助器类)来识别和连接方法名称。

在这个类中有一个检查名称的方法。如果名称包含'ee',请将其替换为'oo'。

第193行的

vendor / symfony / symfony / src / Symfony / Component / StringUtil.php:

// Convert teeth to tooth, feet to foot
if (false !== ($pos = strpos($plural, 'ee')) && strlen($plural) > 3) {
    return substr_replace($plural, 'oo', $pos, 2);
}

因此使用$ employees代替$ employeeCollection可以解决问题..