Пароль Symfony sfForm (обязательно и сравните) - PullRequest
0 голосов
/ 11 января 2012

в симфонии. , , моя форма выглядит так

<?php

class ChangeMyPasswordForm extends sfForm {

    const PASSWORD_REQUIRED_MSG = "We could not update your password. Your password can not be blank. Please enter at least one character for a password.";

    protected static $labels = array(
            'password' => 'Your Password',
        'confirm'  => 'Re-enter Password',
    );

    public function configure()
    {   
        $this->setWidgets(array(
           'password'  => new sfWidgetFormInputPassword(array()),
             'confirm' => new sfWidgetFormInputPassword(array()),
        ));

        $this->setValidators(array(
            'password' => new sfValidatorPass(),
             'confirm' => new sfValidatorPass(),
        ));

        $this->validatorSchema->setOption('allow_extra_fields', true); 

        $this->mergePostValidator(
            new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::IDENTICAL, 
                'confirm', array(), array(
                    'invalid'=>'Passwords do not match. Please try again.'
                )
            )
        );

        $this->mergePostValidator(new sfValidatorString());
        $this->widgetSchema->setLabels(self::$labels);
    }
}

в моем контроллере

public function executeMyAccountPassword(sfRequest $request) {
      $this->form = new ChangeMyPasswordForm();
      $this->validated=$request->getParameter('validated');

      $this->form->bind(array(
              'password' => $request->getParameter('password'),
              'confirm'  => $request->getParameter('confirm'),
      ));

      if ($request->isMethod('post')) {

          if ($this->form->isValid()) {
              $this->validated = true;

              // get player object
              $player = $this->getUser()->getProfile();
              $player->setPassword($request->getParameter('password'));
          }
      }

Я пытаюсь добавить валидатор, чтобы поле пароля не могло быть пустым. Я пытался изменить

$this->setValidators(array('password'=>new sfValidatorString('required'=>'Please enter a password')));

Но все-таки форма выдала ошибку, даже если данные не были опубликованы. Может ли кто-нибудь показать мне пример того, как проверить два совпадающих поля пароля и убедиться, что поля не оставлены пустыми (после отправки формы). Спасибо !!

Ответы [ 2 ]

2 голосов
/ 12 января 2012

У вас есть вторая ошибка.Переместите привязку на несколько строк вниз под if.Это означает, что вы должны выполнить связывание с отправленными значениями

if ($request->isMethod('post')) 
{
  $this->form->bind(array(
    'password' => $request->getParameter('password'),
    'confirm'  => $request->getParameter('confirm'),
  ));

  ... etc...
}
1 голос
/ 11 января 2012

У вас есть синтаксическая ошибка на $ this-setValidators. Вы пропустили несколько скобок:

$this->setValidators(array('password'=>new sfValidatorString('required'=>'Please enter a password')));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...