2013-07-17 94 views
4

我正在用symfony2創建一個網站,並且我在表單驗證時遇到了一些麻煩。這似乎是我的形式方法 「的isValid()」 永遠不會被調用:symfony驗證表單不會調用

繼承人是我的表單創建:

公共職能createAction(請求$要求) {$ 親=新專業美髮(); $ created = false;

$form = $this->createFormBuilder($pro) 
      ->add("raison_sociale",null,array("label"=>"Raison sociale * : ")) 
      ->add("siret",null,array("label"=>"N° SIREN * : ")) 
      ->add("nom",null,array("label"=>"Nom *: ")) 
      ->add("prenom",null,array(
       "label"=>"Prénom *: " 
       )) 
      ->add("adresse",null,array(
       "required"=>false, 
       "label"=>"Adresse : " 
       )) 
      ->add("code_postal","text",array(
       "required"=>false, 
       "label"=> "Code Postal : " 
       )) 
      ->add("ville",null,array(
       "required"=>false, 
       "label"=> "Ville : " 
       )) 
      ->add("tel",null,array("label"=>"Téléphone * : ","required"=>true)) 
      ->add("mobile",null,array(
       "required"=>false, 
       "label"=>"Mobile : " 
       )) 
      ->add("fax",null,array(
       "required"=>false, 
       "label"=>"Fax : " 
       )) 
      ->add("email","email",array("label"=>"Email * : ")) 
      ->add("username",null,array("label"=>"Login * : ")) 
      ->add("password","password",array("label"=>"Mot de passe * : ")) 
      ->add("newsletter",null,array("required"=>false,"label"=>"Je souhaite m'inscrire à la newsletter")) 
      ->add("accept","checkbox",array("label"=>" ")) 
      ->getForm() 
    ; 

    if ($request->isMethod("POST")) 
    { 
     $form->bind($request); 
     if ($form->isValid()) 
     { 
      $em=$this->getDoctrine()->getEntityManager(); 
      $pro=$form->getData(); 
      $encoder = $this->get('security.encoder_factory')->getEncoder($pro); 
      $pro->setPassword($encoder->encodePassword($pro->getPassword(),$pro->getSalt())); 
      $em->persist($pro); 
      $em->flush(); 
      $created=true; 
      $this->get("session")->getFlashBag()->add("success", "Votre compte a bien été créé. Vous avez reçu un mail confirmant votre inscritpion."); 
     } 
    } 

    return $this->render('OverscanProfessionnelBundle:Front:create.html.twig',array('form'=>$form->createView(),'created'=>$created)); 
} 

這裏是我validatio.yml:

webapp\ProfessionnelBundle\Entity\Professionnel: 
    constraints: 
     Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
      fields: email 
      message: "L'email est déjà pris" 

     Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
      fields: username 
      message: "Ce login est déjà pris" 
    properties: 
     raison_sociale: 
      - Valid: 
     siret: 
      - Length: 
       min : 9 
       max : 9 
       minMessage: "Le SIREN doit contenir 9 caractères" 
       maxMessage: "Le SIREN doit contenir 9 caractères" 
      - Regex: 
       pattern: "/\d/" 
       match: true 
       message: "Le SIREN ne doit pas contenir de lettre" 
     tel: 
      - Length: 
       min : 10 
       max : 10 
       minMessage: "Le numéro de téléphone doit contenir 10 chiffres" 
       maxMessage: "Le numéro de téléphone doit contenir 10 chiffres" 

所以,當我發表我的表格沒有驗證被稱爲但是約束! 有人可以幫我嗎?

+0

你是什麼意思'沒有驗證被稱爲,但約束是?請解釋... – nifr

+0

在我的驗證我有限制唯一用戶郵件。如果我嘗試使用相同的電子郵件地址添加新記錄,我收到以下通知消息:「Ce login estdéjàpris」 通過以下約束拋出: Symfony \ Bridge \ Doctrine \ Validator \ Constraints \ UniqueEntity: fields:username 消息:「Ce login estdéjàpris」 – TheMouk

+0

是的,我可以看到...和什麼不工作? – nifr

回答

0

嘗試添加數據類的形式是這樣的:

$this->createFormBuilder($entity, array(
     'data_class' => '\Vendor\YourBundle\Entity\MyEntity', 
    ) 
) 
// -> add() 
+0

我嘗試它,但它不起作用。 – TheMouk

3

看看你的「應用/../ config.yml
你應該看到這樣的事情:

framework: 
... 
    validation: { enable_annotations: true } 

將其設置爲:

framework: 
... 
    validation: { enabled: true, enable_annotations: true } 

然後,你的validation.yml應該被加載!

+0

這個工作對我來說:)我有同樣的問題,現在它解決了!謝謝。 – unbreak

+0

我不知道爲什麼我沒有「框架」下的「驗證」條目,但添加這只是保存了我的一天。感謝您指出這一點 – elwood