0
私のコードで何が間違っていますか? URLに応じてMoteur
オブジェクトを更新または挿入したいとします。
ありがとうございます。 PHP5がネイティブに参照によってオブジェクトを渡すようsymfony2コントローラでフォームを更新または挿入しようとしています
/**
* @Route("/moteur/{moteurid}", name="moteur", requirements={"moteurid" = "\d+"}, defaults={"moteurid" = null})
* @Template()
*
* Cette page permet d'enregistrer de nouveaux moteurs (et de les éditer).
*/
public function moteurAction($moteurid)
{
$args=array();
$avertissement = null;
if (!$this->get('security.context')->isGranted('ROLE_ADMIN'))
{
$avertissement = "Vous n'avez pas le droit d'accéder à cet espace.";
return $this->redirect($this->generateUrl('index', array('avertissement' => $avertissement)));
}
$args['menu']['admin'] = 'selected';
$obj = null;
if ($moteurid == null)
{
$obj = new Moteur();
}
else
{
$obj = $this->getDoctrine()->getRepository('CreasixtineAFBundle:Moteur')->find($moteurid);
}
$form = $this->createForm(new FormMoteur(), $obj);
$args['form'] = $form->createView();
if ($this->getRequest()->getMethod() == 'POST')
{
$form->bindRequest($this->getRequest());
if ($form->isValid())
{
$obj = $form->getData(); // Type Moteur()
$pn = $obj->getPnid();
$em = $this->getDoctrine()->getEntityManager();
if ($moteurid == null)
{
$em->persist($obj);
$avertissement = "Moteur créé !";
}
else
{
// Rien, le moteur sera mis à jour avec flush()
$avertissement = "Moteur mis à jour !";
}
foreach ($pn as $my_pn){$em->persist($my_pn);}
$em->flush();
return $this->redirect($this->generateUrl('admin', array('avertissement' => $avertissement)));
}
else
{
throw new Exception("Le formulaire n'est pas valide.");
}
}
$contenu = $this->rendu($args, "formulaire_moteur.html.twig");
return $contenu;
}
ありがとう! – Creasixtine
しかし、関連するすべてのエンティティに「カスケード:[すべて]」を許可する場合はどうすればよいですか?私はそれをこのように動作させることはできません、私は "SQLSTATE [23000]:整合性制約違反:1062重複エントリ"を取得します。 – linuxatico