setValidator () в классе действий - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть одна проблема, когда я пытаюсь использовать setValidator() (не setValidators) в файле класса действий.

это мой код класса базовой формы ..

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();
  }

это мой код класса действий ..

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;
        }  

      }
  }

я получаю следующую ошибку

Исправляемая фатальная ошибка: аргумент 2, передаваемый в sfForm :: setValidator (), должен быть экземпляромsfValidatorBase, ничего не указано, вызывается в /home/hardik/web/demo/apps/frontend/modules/user/actions/actions.class.php в строке 77

мне просто нужно переопределить валидатордля поля имени в классе действия.

1 Ответ

3 голосов
/ 08 ноября 2011

Ваш синтаксис неправильный. Посмотрите на подпись setValidator. Вы должны сделать это:

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