2016-04-16 7 views
1

Ich benutze symfony3 mit Fenster 7 und benutze benutzerdefinierte Form rending. wie dasisValid() -Methode gibt false in symfony zurück

{{ form_start(form,{ 'attr': {'class': 'form-horizontal','role':'form','id':'form'} }) }} 

---- form field here 

{{ form_widget(form._token) }} 
      {{ form_end(form, {'render_rest': false}) }} 



/** 
    * @Route("entity/entity/{id}", name="entity_entity",defaults={"id" = 0})  
    */ 
    public function entityAction(Request $request,$id){ 
     $action = false; 
     $arr_XYZ_data = array(); 
     $arr_XYZ_prepare_data = array();  
     $form_title = 'Add New XYZ'; 
     $obj_XYZ = new XYZ();    
     $form = $this->createForm(XYZType::class, $obj_XYZ); 
     if($id!=0){ 
      $obj_repo = $this->getDoctrine()->getRepository('AppBundle:XYZ'); 
      $arr_XYZ_data = $obj_repo->find($id);   
      if($arr_XYZ_data){ 
      $action = true; 
      $form_title = 'Update XYZ';     
      $arr_XYZ_data = $obj_repo->findXYZById($id);   
      $arr_XYZ_prepare_data = $this->_prepareData($arr_XYZ_data); 
      } 
     } 
     $form->handleRequest($request);    
     if (($form->isSubmitted())&&($form->isValid())) {   
      $obj_XYZ->setXYZId($id); 
      $str_hiddenfield_result = $form->get('extraformfield')->getData(); 
      $arr_hiddenfield_result = explode('&',$str_hiddenfield_result);  
      $obj_XYZ->setDef($obj_XYZ->getDef()->getDefId()); 
      $obj_XYZ->setAbc($arr_hiddenfield_result[3]); 
      $obj_XYZ->setAuthor(1); //ldap session value 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($obj_XYZ);   
      $em->flush();     

      $this->addFlash('success', 'Your record has been added successfully!'); 
      return $this->redirectToRoute('XYZ_index', array(), 301); 
     }else{ 
      $form->getErrors(); 
     } 
    } 

über den Code wird kein Fehler gedruckt, kann aber nicht übergeben werden. Also bitte, jeder kann mir vorschlagen, wie ich das Problem beheben kann.

Wie erhalten Sie alle Fehler in der Zeichenfolge mit entsprechenden jedem Formularfeld.

+0

Werfen Sie einen Blick auf die Web-Debug-Symbolleiste oder verwenden Sie $ form-> getErrors (true) –

+0

Sie müssen explizit Ihren Fehler in Ihrem else-Block drucken. – habibun

Antwort

1

Wenn Sie nur den Getter aufrufen, wird nichts gedruckt, Sie müssen dies selbst tun, indem Sie eine andere Funktion (Drucken) verwenden.

return new \Symfony\Component\HttpFoundation\Response($form->getErrors()); 

Es wird eine Zeichenfolge mit allen Fehlern rendern.

Je nach Kontext (traditionelle, Ajax, ...), können Sie einfach wieder machen die Form etwa so:

return $this->render('YourBundle:YourView.html.twig', [ 
    'form' => $form->createView(), 
]); 

Die Fehler richtig angezeigt werden sollen.