2017-05-04 67 views
0

我在symfony 2.8和工作,我有兩個實體:個人簡歷和FormationCv, 一個了Cv可以有很多形成了Cv,所以我儘量用關係一對多與集合類型做設置當前實體的其他

CvType

class CvForm extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder 
      //.. 
      ->add('formations', CollectionType::class, array(

     'entry_type' => FormationCvForm::class, 
     'allow_add' => true, 
     'by_reference' => false, 

    ))    ; 

} 

FormationCvType

class FormationCvForm extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder->add('titre') 
      ->add('etablissement') 
      ->add('description') 

      ->add('dateDebut', DateType::class, array(
               'widget' => 'choice', 'translation_domain' => 'FOSUserBundle','data' => new \DateTime())) 
      ->add('dateFin', DateType::class, array(
               'widget' => 'choice', 
                )) 

      ; 

} 

控制器

public function createAction(Request $request) 
    { 
    $em = $this->getDoctrine()->getManager(); 
     $cv = new Cv(); 

$form = $this->createForm('Front\FrontBundle\Form\CvForm', $cv); 
$form->handleRequest($request); 

if ($form->isSubmitted() && $form->isValid()) { 
     $user=$this->get('security.context')->getToken()->getUser(); 
     $cv->setEtudiant($user); 
     $cv->setTelephone($user->getTel()); 
     $cv->setDateNaissance($user->getBirthday()); 
     $cv->setActif(false); 




     $em = $this->getDoctrine()->getManager(); 



     $em->persist($cv); 
     $em->flush(); 
     $formations=$cv->getFormations(); 
     $formation= array(); 
     foreach ($formation as $formations) { 
      $formation->setCv($cv->getId()); 
      $em->persist($formation); 
      $em->flush(); 

     } 




     return $this->redirectToRoute('cv_show', array('id' => $cv->getId())); 

    } 

return $this->render("FrontBundle:CV:createCv.html.twig", array(
     'form' => $form->createView(), 

    )); 

} 

,如果我提交表單,在FormationCv的表總是空的問題, 有人幫幫我好嗎?

+0

你看過你的瀏覽器POST請求,看看實際傳輸了什麼嗎? – ccKep

+0

另外:如果您的實體註釋設置正確(例如,反轉和級聯),您可以刪除控制器中的最後一部分(整個foreach),因爲教義將處理該部分。 – ccKep

+0

另外:你的foreach應該做什麼?您初始化一個空數組並嘗試循環。 – ccKep

回答

2

你的foreach是不會跑單次迭代:

$formations=$cv->getFormations(); 
    $formation= array(); 
    foreach ($formation as $formations) { // You're looping over $formation here, which is an empty array as per the line before this 
     $formation->setCv($cv->getId()); 
     $em->persist($formation); 
     $em->flush(); 

    } 

刪除$formation= array();並在foreach狀態切換您的變量:foreach ($formations as $formation) {

或者/最好:擺脫整個塊,並讓教條通過設置您的實體級聯持久性操作並告訴它有關反方(mappedBy/inversedBy)來完成工作。

+0

多數民衆贊成它,它運作良好,非常感謝你 –