问题
I have a nested form
demand
home
child
godfather
demand
is a parent and embed home
which embed child
and father
(2 last forms are on the same level)
In DemandeType
I have:
$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',
));
}
In 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',
));
}
And in ChildType
and GodfatherType
I have only text fields for firstname, lastname with their right data_class.
But when I submit the form (DemandType, wichh embed all subforms) I got this error :
Neither the property "address" nor one of the methods "getAddress()", "address()", "isAddress()", "hasAddress()", "__get()" exist and have public access in class "AppBundle\Entity\Demand".
And these methods don't belong to Demand
entity but Home
entity. I've put the inherit_data
, what I'm missing ?
Thanks
回答1:
This happens because you're using inherit_data
. This property makes the form pass the entire submitted data to its child instead of a single property (or anything from getter function) which happens by default.
You do this for both demand
and home
so that's why home
form type receives an instance Demand
entity. So I guess you want to remove inherit_data
from home
and use just:
->add('home', 'home', array(
'mapped' => false,
'data_class' => 'AppBundle\Entity\Home',
))
In this case home
will receive data from $demand->getHome()
which should be a Hone
entity.
I'm not sure you really need to use inherit_data
at all but depends on your use case. Usually, you don't need it because you have structure of entities such as:
/** @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 { ... }
But I don't know what exactly your data structure is so it's hard to help.
Also, you're using mapped => false
which I'm not sure is what you want because it prevent Symfony from updating entities with form data.
See:
- http://symfony.com/doc/current/reference/forms/types/form.html#mapped
- http://symfony.com/doc/current/reference/forms/types/form.html#inherit-data
来源:https://stackoverflow.com/questions/39431263/symfony-form-inheritance-neither-the-property-nor-one-of-the-methods-exist