我有以下代码设置:
窗体/ 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".
答案 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可以解决问题..