我有一个嵌套的表单
demand
home
child
godfather
demand
是一个父级并嵌入了home
,其中嵌入了child
和father
(最后两种形式位于同一级别)
在DemandeType
我有:
$builder
->add('date', 'datetype')
->add('name', 'text')
//...
->add('home', 'home', array(
'mapped' => false,
'data_class' => 'AppBundle\Entity\Home',
'inherit_data' => true
))
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Demand',
));
}
在HomeType
:
$builder
->add('address', 'textarea')
//...
->add('child', 'child', array(
'mapped' => false,
'data_class' => 'AppBundle\Entity\Child',
'inherit_data' => true
))
->add('godfather', 'godfather', array(
'mapped' => false,
'data_class' => 'AppBundle\Entity\Godfather',
'inherit_data' => true
))
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Home',
));
}
在ChildType
和GodfatherType
中,我只有firstname的文本字段,lastname和正确的data_class。
但是当我提交表单(DemandType,wichh嵌入所有子表单)时,我收到了这个错误:
属性“地址”和方法“getAddress()”,“address()”,“isAddress()”,“hasAddress()”,“__ get()”都不存在,并且在课堂上具有公共访问权限“的appbundle \实体\需求”。
这些方法不属于Demand
实体,而属于Home
实体。我放了inherit_data
,我错过了什么?
由于
答案 0 :(得分:1)
这是因为您正在使用inherit_data
。此属性使表单将整个提交的数据传递给其子节点而不是默认情况下发生的单个属性(或任何来自getter函数的属性)。
您为demand
和home
执行此操作,以便home
表单类型接收实例Demand
实体的原因。因此,我想您要从inherit_data
中删除home
,并使用:
->add('home', 'home', array(
'mapped' => false,
'data_class' => 'AppBundle\Entity\Home',
))
在这种情况下,home
将从$demand->getHome()
接收应该是Hone
实体的数据。
我不确定你真的需要使用inherit_data
,但取决于你的使用案例。通常,您不需要它,因为您具有以下实体的结构:
/** @ORM\Entity() */
class Demand {
/** @ORM\OneToWhatever() */
private $home;
public function getHome() {
return $this->home;
}
}
/** @ORM\Entity() */
class Home {
/** @ORM\OneToWhatever() */
private $child;
public function getChild() {
return $this->child;
}
}
/** @ORM\Entity() */
class Child { ... }
但我不知道你的数据结构到底是什么,所以很难提供帮助。
此外,您正在使用mapped => false
我不确定您想要的是什么,因为它会阻止Symfony使用表单数据更新实体。
请参阅: