2014-09-23 89 views
0

我想驗證聯繫表單上的字段,它自我的表單工作正常,併發布數據,但是我堅持讓字段驗證。根據this文檔,它似乎是非常簡單的設置驗證,但由於某種原因,它不適合我。在Symfony 2.5中的表單驗證

當我創建捆綁包時,捆綁的config文件夾中沒有validation.yml,所以我手動創建了它,這就是我的validation.yml的外觀,它現在非常基本。

ClickTeck\ContactBundle\Entity\Enquiry: 
    properties: 
     name: 
      - NotBlank: ~ 
      - Length: 
       min: 2 
       max: 50 
       minMessage: "Your first name must be at least {{ limit }} characters long" 
       maxMessage: "Your first name cannot be longer than {{ limit }} characters long" 

這是DefaultController樣子

namespace ClickTeck\ContactBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use ClickTeck\ContactBundle\Entity\Enquiry; 
use ClickTeck\ContactBundle\Form\EnquiryType; 
use Symfony\Component\HttpFoundation\Request; 
class DefaultController extends Controller 
{ 
    public function indexAction(Request $request) 
    { 
     $enquiry = new Enquiry(); 
     $form = $this->createForm(new EnquiryType(), $enquiry); 

      $form->handleRequest($request); 

      if ($form->isValid()) { 
       return $this->redirect($this->generateUrl('contact_form')); 
      } 

     return $this->render('ContactBundle:Default:contact.html.twig', array(
       'form' => $form->createView() 
      )); 
    } 
} 

這是我Enquiry.phpEntity文件夾

<?php 

namespace ClickTeck\ContactBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Enquiry 
*/ 
class Enquiry 
{ 
    /** 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @var string 
    */ 

    private $name; 

    /** 
    * @var string 
    */ 
    private $email; 

    /** 
    * @var string 
    */ 
    private $subject; 

    /** 
    * @var string 
    */ 
    private $body; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return Enquiry 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * @return Enquiry 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set subject 
    * 
    * @param string $subject 
    * @return Enquiry 
    */ 
    public function setSubject($subject) 
    { 
     $this->subject = $subject; 

     return $this; 
    } 

    /** 
    * Get subject 
    * 
    * @return string 
    */ 
    public function getSubject() 
    { 
     return $this->subject; 
    } 

    /** 
    * Set body 
    * 
    * @param string $body 
    * @return Enquiry 
    */ 
    public function setBody($body) 
    { 
     $this->body = $body; 

     return $this; 
    } 

    /** 
    * Get body 
    * 
    * @return string 
    */ 
    public function getBody() 
    { 
     return $this->body; 
    } 

} 

這是EnquiryType.phpEntity文件夾

namespace ClickTeck\ContactBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class EnquiryType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name'); 
     $builder->add('email', 'email'); 
     $builder->add('subject'); 
     $builder->add('body', 'textarea'); 
    } 

    public function getName() 
    { 
     return 'contact'; 
    } 
} 

任何最後我contact模板

{% extends '::base.html.twig' %} 
{% block title %}Contact{% endblock %} 
{% block body %} 
    <div class="container"> 
     <div class="row"> 
      <header> 
       <h1>Contact Us</h1> 
      </header> 
      {{ form_errors(form) }} 
      <form action="{{ path('contact_form') }}" method="post" {{ form_enctype(form) }} role="form" 
        class="form-horizontal"> 
       {{ form_errors(form) }} 
       <div class="form-group"> 
        <div class="col-sm-2 control-label"> 
         {{ form_label(form.name) }} 
        </div> 
        <div class="col-sm-10"> 
         {{ form_widget(form.name, { 'attr': {'class': 'form-control'} }) }} 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-sm-2 control-label"> 
         {{ form_label(form.email) }} 
        </div> 
        <div class="col-sm-10"> 
         {{ form_widget(form.email, { 'attr': {'class': 'form-control'} }) }} 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-sm-2 control-label"> 
         {{ form_label(form.subject) }} 
        </div> 
        <div class="col-sm-10"> 
         {{ form_widget(form.subject, { 'attr': {'class': 'form-control'} }) }} 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-sm-2 control-label"> 
         {{ form_label(form.body) }} 
        </div> 
        <div class="col-sm-10"> 
         {{ form_widget(form.body, { 'attr': {'class': 'form-control', 'rows':'10'} }) }} 
        </div> 
       </div> 
       {{ form_rest(form) }} 
       <div class="form-group"> 
        <div class="col-sm-offset-2 col-sm-10"> 
         <input type="submit" value="Send Message" class="btn btn-primary"/> 
        </div> 
       </div> 
      </form> 
     </div> 
    </div> 
{% endblock %} 

當我提交與空名稱字段的表單我沒有得到任何錯誤,我會很感激,如果有人可以點我到正確的方向。

回答

0

這是什麼解決了我的問題,在app/config/config.yml默認情況下驗證似乎被關閉,改變到以下和所有的驗證工作。

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