我希望这是一个愚蠢的问题,但我看不到它。我正在研究Symfony 2项目(版本2.7),我有这个例外:
属性“contract”和“addContract()”/“removeContract()”,“setContracts()”,“contracts()”,“__ set()”或“__call()”方法之一都不存在并在“AppBundle \ Entity \ User \ User”类中拥有公共访问权限
我理解异常但是addContract()存在且是公共的,所以我的User类中的属性契约也是如此。我提交表格时遇到了这个例外。 (在这种形式中,我包括合同表。问题可能在这里)
我的UserClass with contracts属性
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $contracts;
/**
* Add contracts
*
* @param \AppBundle\Entity\Work\Contract $contracts
* @return User
*/
public function addContract(Contract $contracts)
{
$this->contracts[] = $contracts;
return $this;
}
/**
* Remove contracts
*
* @param \AppBundle\Entity\Work\Contract $contracts
*/
public function removeContract(Contract $contracts)
{
$this->contracts->removeElement($contracts);
}
/**
* Get contracts
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getContracts()
{
return $this->contracts;
}
我的UserType表格
class UserType extends BaseType {
/**
* Constructor
*/
public function __construct()
{
parent::__construct('AppBundle\Entity\User\User');
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('number', 'text', array(
'label' => 'form.number',
))
->add('seniority', 'date', array(
'label' => 'form.seniority',
'widget' => 'single_text',
'input' => 'datetime',
'format' => 'dd/MM/yyyy',
))
->add('comment', 'textarea', array(
'label' => 'form.comment',
'required' => false,
))
->add('contracts', new ContractType());
}
正如您所看到的,我将我的合同表单添加到我的构建器中,并且渲染效果很好。我提交时我得到了例外。
啊,我使用Yaml映射。 User和Contract之间的关系是OneToMany - ManyToOne。一个用户可以签订许多合同。
谢谢!
答案 0 :(得分:1)
可能你应该像这样构建你的表单(从contracts
开始是一个ArrayCollection类型):
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
....
->add('contracts', 'collection', array(
'type' => new ContractType(),
'by_reference' => false,
...
));
}