2012-07-21 162 views
0

下面是我对形式的Symfony2表单验证

class PracticeType extends AbstractType { 
    /** 
    * Returns the name of this type. 
    * 
    * @return string The name of this type 
    */ 
    function getName() 
    { 
     return "practice"; 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'data_class' => 'Shwetanka\SampleBundle\Entity\Practice', 
      'csrf_protection' => true, 
      'csrf_field_name' => '_token', 
      'intention' => 'practice_item' 
     ); 
    } 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('name', 'text', array(
      'required' => true, 
      'label' => 'Clinic Name' 
     )); 
    } 
} 

我的实体

/** 
* Shwetanka\SampleBundle\Entity\Practice 
* 
* @ORM\Table(name="practice") 
* @ORM\Entity 
*/ 
class Practice 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="practiceId", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $name 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    * @Assert\NotBlank() 
    */ 
    private $name; 
    //getters and setters 
} 

我的控制器代码 -

... 
$form = $this->createForm(new PracticeType()); 
if($request->getMethod() == 'POST'){ 
    $form->bindRequest($request); 
    if($form->isValid()){ 
     $practice = EntityHelper::preparePracticeForSave($form); 
     return array('hello' => 'world'); 
    }else { 
     $view = View::create(); 
     $view->setTemplate('ShwetankaSampleBundle:Practice:new_practice.html.twig'); 
     $view->setFormat('html'); 
     $view->setData(array('form' => $form->createView(), 'logout' => true)); 
     return $this->get('fos_rest.view_handler')->handle($view); 
    } 
} 
... 

当我提交表单,我得到验证错误($form.isValid() is false)但是当我检查$form['name']我得到了我在表单中输入的值。我无法理解为什么验证失败。需要帮忙。

回答

0

你有没有得到任何错误?

渲染错误信息与模板:

{{ form_errors(form) }} 

或访问错误阵列控制器:

$form->getErrors() 

我认为它会给你一些提示

+0

它只是显示4个语句,每个语句都是 - '这个值不应该是空白的。'我不知道哪些价值。 – Shwetanka 2012-07-23 07:23:22

0

可能会为您忘了渲染CSRF形式标签?你可以使用form_rest(form)这个。