В формах Symfony, как я могу проверить поле (то есть пароль), запрашивая БД для правильного значения? - PullRequest
1 голос
/ 17 июля 2010

Вопрос новичка.

Я создал очень простой класс LoginForm в Symfony. Он проверяет, вставил ли пользователь имя пользователя и пароль в поле, и работает ли он должным образом.

// UserLoginForm :: configure()

$this->setWidgets(array(
  'username' => new sfWidgetFormInputText(),
  'password' => new sfWidgetFormInputPassword(),
));
$this->setValidators(array(
  'username' => new sfValidatorString(array('required' => true),
  'password' => new sfValidatorString(array('required' => true)
));


// Action :: executeLogin()

$this->loginForm = new UserLoginForm();

if ($request->isMethod('post')) {
    $params = $request->getParameter('login');
    $this->loginForm->bind($request->getParameter('login'));

    if ($this->loginForm->isValid()) {
        // ... more code                
    }
}

Теперь я пытаюсь проверить наличие поля имени пользователя в БД и, если оно не существует, я хочу аннулировать форму . То же самое для пароля: если пара имя пользователя + пароль не существует, но с другим сообщением.

Пытаясь найти решение, которое я искал двумя возможными способами:

В действии:

  • запрос в БД,
  • проверьте имя пользователя,
  • сделать недействительным поле имени пользователя формы (я хочу сообщение об ошибке в полученном HTML),
  • то же самое для имени пользователя + проверка пароля

В таком случае, как я могу сделать форму недействительной? Как обработать сообщение об ошибке в шаблоне?

В классе формы, вызывающем метод isValid ():

  • добавить что-то в setValidator ()
  • ИЛИ добавить средство проверки почты, которое вызывает частную функцию, которая запрашивает модель

В таком случае, как я могу использовать модель в классе Form?

Какой самый лучший / быстрый подход? Другие возможности?

1 Ответ

2 голосов
/ 17 июля 2010

Думаю, вам будет очень полезно взглянуть на код валидатора sfDoctrineGuardPlugin . Они создают этот почтовый валидатор и устанавливают его в виде . Даже если вы не хотите использовать sfDoctrineGuardPlugin (или sfGuardPlugin, если вы используете Propel), его код может стать ценным источником вдохновения.

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