isValid()方法在symfony中返回false

时间:2016-04-16 11:05:05

标签: symfony

我正在使用带窗口7的symfony3并使用自定义表单rending。像那样

{{ 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();
        }
    }

上面的代码不会打印任何错误但无法提交。所以请任何人都可以建议我如何解决这个问题。

如何使用相应的每个表单字段获取字符串中的所有错误。

1 个答案:

答案 0 :(得分:1)

只是调用getter不会打印任何东西,你需要自己使用另一个(打印)功能。

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

它将呈现包含所有错误的字符串。

根据上下文(传统的,ajax,...),你可以像这样重新渲染表单:

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

应正确显示错误。