Bonjour aux spécialistes sf2/Dtne 2, j'ai un pblme que je n'arrive pas à résoudre. Je voudrais votre avis. j'obtiens cet erreur lors de la sauvergarde d'un objet et de ses dépendances
Property "generalParameters" is not public in class "App\BackofficeBundle\Entity\Culture". Maybe you should create the method "setsetGeneralParameters()"
la problematique est la suivante:
dans l'entité Culture on trouve ceci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
/**
* @var GeneralParameters
*
* @ORM\ManyToMany(targetEntity="GeneralParameters", inversedBy="culture", cascade={"persist", "remove"})
* @ORM\JoinTable(name="culture_document",
* joinColumns={
* @ORM\JoinColumn(name="culture_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="general_parameters_id", referencedColumnName="id")
* }
* )
*/
private $generalParameters;
public function __construct()
{
$this->generalParameters = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add generalParameters
*
* @param App\BackofficeBundle\Entity\GeneralParameters $generalParameters
*/
public function addGeneralParameters(\App\BackofficeBundle\Entity\GeneralParameters $generalParameters)
{
$this->generalParameters[] = $generalParameters;
} |
ensuite dans l'entité que je tente de persisté après soumission du formulaire on trouve ceci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
/**
* @var Culture
*
* @ORM\ManyToMany(targetEntity="Culture", mappedBy="generalParameters", cascade={"persist", "remove"})
*/
private $culture;
public function __construct()
{
$this->culture = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add culture
*
* @param App\BackofficeBundle\Entity\Culture $culture
*/
public function addCulture(\App\BackofficeBundle\Entity\Culture $culture)
{
$this->culture[] = $culture;
} |
et dans le controleur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| $generalParametersForm = new GeneralParametersType();
$generalParameter = new GeneralParameters();
$culture = new Culture();
$culture->addGeneralParameters($generalParameter);
$generalParameter->addCulture($culture);
$form = $this->get('form.factory')->create($generalParametersForm);
$form->setData($generalParameter);
$request = $this->get('request');
if ($request->getMethod() === 'POST') {
$form->bindRequest($request);
if ($form->isValid()){
$em = $this->getDoctrine()->getEntityManager();
$em->persist($form->getData());
$em->flush();
return $this->redirect($this->generateUrl('generalparameters_show', array('id' => $generalParameter->getId())));
}
} |
ahh p-e mettre aussi le formulaire imbriqué
->add('culture', 'collection', array('type' => new CultureType()))
Voilà j'ai l'impression de m'etre tendu un piege tout seul avec doctrine2 qui m'a généré le AddCulture pour gérer la relation entre culture et generalParameters.
a savoir seul la table generalParameters comptre une clé etrangere culture_id, la table culture elle ne compte qu'une colonne id et uen colonne name.
Si vous avez des pistes, des solutions je suis preneur.
Cordialement
Lexter
ps: question idiote, puis je faire une methode setGeneralParameters ou setGgeneralParametersId dans l'entité culture alors que la table correspondante n'a pas de champ generalParametersId ou alors devrait il y en avoir un? emcri d'avance!
Partager