2011-11-08 3 views
1

액션 클래스 파일에 setValidator() (setValidators 아님)을 사용할 때 한 가지 문제가 있습니다. 액션 클래스의 setValidator()

내가 그냥 필요

Catchable fatal error: Argument 2 passed to sfForm::setValidator() must be an instance of sfValidatorBase, none given, called in /home/hardik/web/demo/apps/frontend/modules/user/actions/actions.class.php on line 77

오류 다음 얻고있다

public function executeNewuser($request) 
    { 
     $this->form = new UsersForm(); 
     $this->form->getWidgetSchema()->setNameFormat('users[%s]'); 

     //$this->form->setValidators(array('name' => new sfValidatorDoctrineUnique(array('model' => 'Users','column' => 'name')))); 

     $this->form->setValidator(array('name' => new sfValidatorDoctrineUnique(array('model' => 'Users','column' => 'name')))); 



     if($request->isMethod('post')) 
     { 
     $this->form->bind($request->getParameter('users')); 
     if($this->form->isValid()) 
     {  
      echo "Hello";exit; 
     } 

     } 
    } 

..

public function setup() 
    { 
    $this->setWidgets(array(
     'id'   => new sfWidgetFormInputHidden(), 
     'name'  => new sfWidgetFormInputText(), 
     'age'  => new sfWidgetFormChoice(array('choices' => array('21' => '21', '22' => '22', '23' => '23', '24' => '24', '25' => '25', '26' => '26', '27' => '27', '28' => '28', '29' => '29', '30' => '30'))), 
     'gender'  => new sfWidgetFormChoice(array('choices' => array('Male' => 'Male', 'Female' => 'Female'))), 
     'email'  => new sfWidgetFormInputText(), 
     'salt'  => new sfWidgetFormInputText(), 
     'password' => new sfWidgetFormInputPassword(array('type' => 'password')), 
     'created_at' => new sfWidgetFormDateTime(), 
     'updated_at' => new sfWidgetFormDateTime(), 
    )); 

    $this->setValidators(array(  
     'id'   => new sfValidatorPass(),  
     'name'  => new sfValidatorString(array('required' => true)), 
     'age'  => new sfValidatorPass(),  
     'gender'  => new sfValidatorChoice(array('choices' => array('Male','Female'))), 
     'email'  => new sfValidatorEmail(array('required' => true)), 
     'password' => new sfValidatorString(array('required' => true)), 
     'created_at' => new sfValidatorDateTime(), 
     'updated_at' => new sfValidatorDateTime(), 
    )); 

    $this->widgetSchema->setNameFormat('signin[%s]'); 

    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema); 


    //$this->validatorSchema->setPostValidator(new sfUserValidate()); 

    $this->setupInheritance(); 

    parent::setup(); 
    } 

이 내 액션 클래스 코드입니다 .. 내 기본 폼 클래스 코드 액션 클래스의 이름 필드의 validator를 오버라이드 (override)합니다.

답변

3

구문이 잘못되었습니다. setValidator의 서명을보십시오. 다음을 수행해야합니다.

$this->form->setValidator(
    'name', 
    new sfValidatorDoctrineUnique(array('model' => 'Users','column' => 'name'))); 
+0

Thanx greg0ire :) – hardik

관련 문제