2012-08-16 32 views
2

我想驗證我的symfony2表單中的未綁定字段。如何將驗證添加到symfony2中的未綁定表單字段

我搜索了它,發現了幾個類似的解決方案,所以我做了一個複製粘貼,並把我自己的東西放在那裏,但它不適用於我。可能有一個使用聲明或者是我讀過的所有解決方案中都沒有的東西,因爲每個人都知道它們是必要的,所以省略了。除了這裏的菜鳥。

我的代碼:

<?php 

namespace BizTV\UserBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

use Symfony\Component\Validator\Constraints\CallbackValidator as CallbackValidator; 
use Symfony\Component\Form\FormValidatorInterface; 

use Doctrine\ORM\EntityRepository; 

class newServerType extends AbstractType 
{ 

    public function buildForm(FormBuilder $builder, array $options) 
    { 

     $builder 
      ->add('company', 'entity', array(
       'label' => 'Vilket företag tillhör servern? ', 
       'multiple' => FALSE, 
       'expanded' => FALSE, 
       'property' => 'companyName', 
       'class' => 'BizTV\BackendBundle\Entity\company', 
      ));  

     $builder->add('screenName', null, array('property_path' => false, 'label' => 'Namn på skärmen (användaren kan ändra det senare) ')); 

     $builder-> addValidator(new CallbackValidator(function(FormInterface $form){ 
      $screenName = $form['screenName']; 
      if (empty($screenName)) { 
       $form['screenName']->addError(new FormError("Du måste ange ett namn för den nya skärmen")); 
      } 
     })); 

     $builder 
      ->add('username', 'text', array('label' => 'Servernamn (endast för serverns login samt vår referens)'))    
      ->add('plainPassword', 'repeated', array('type' => 'password', 'first_name' => 'Lösenord för server ', 'second_name' => 'Upprepa lösenord för server',)); 

    } 

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

我的錯誤:

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\FormBuilder::addValidator() must implement interface Symfony\Component\Form\FormValidatorInterface, instance of Symfony\Component\Validator\Constraints\CallbackValidator given, called in /var/www/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php on line 35 and defined in /var/www/biztv_symfony/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php line 255

回答

5

因此,對於需要在symfony 2中對未綁定表單字段進行驗證的其他人,我是如何做到的 - 原來我錯過了一堆使用語句,他們沒有列在我的任何網站上發現主題的其他線程。

我已經清除了一切,但必需品。感謝m2mdas幫助我完成這一工作。

<?php 

namespace BizTV\UserBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 
use Symfony\Component\Form\FormInterface; 
use Symfony\Component\Form\CallbackValidator; 
use Symfony\Component\Form\FormValidatorInterface; 
use Symfony\Component\Form\FormError; 


use Doctrine\ORM\EntityRepository; 

class newServerType extends AbstractType 
{ 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('screenName', null, array('property_path' => false, 'label' => 'Namn på skärmen (användaren kan ändra det senare) ')); 

     $builder-> addValidator(new CallbackValidator(function(FormInterface $form){ 
      $screenName = $form->get('screenName')->getData(); 
      if (empty($screenName)) { 
       $form['screenName']->addError(new FormError("Du måste ange ett namn för den nya skärmen")); 
      } 
     }));  
    } 

    public function getName() 
    { 
     return 'biztv_userbundle_newservertype'; 
    } 
} 
+2

此方法在2.1中已棄用。請參閱以下線程以獲取更多詳細信息:http://stackoverflow.com/questions/12911686/symfony-validate-form-with-mapped-false-form-fields – 2013-07-30 16:34:33

+1

調用未定義的方法Symfony \ Component \ Form \ FormBuilder :: addValidator () – afilina 2015-07-07 14:32:35

2

CallbackValidator FQCN應該Symfony\Component\Form\CallbackValidator

+0

改變了用途如你所說,我得到一個類似的錯誤消息:開捕致命錯誤:傳遞給BizTV \ UserBundle \表格\ {關閉}(參數1)必須是BizTV \ UserBundle \表格\實例FormInterface,在/var/www/biztv_symfony/src/BizTV/UserBundle/Form/newServerType.php中給出的Symfony \ Component \ Form \ Form的實例第30行 – 2012-08-16 21:36:42

+1

在使用部分添加'使用Symfony \ Component \ Form \ FormInterface;'。 – 2012-08-16 21:43:39

相關問題