Как я могу использовать валидатор sfValidatorEmail в Symfony для проверки одного поля электронной почты - PullRequest
1 голос
/ 17 ноября 2010

У меня есть форма с 2 элементами, которые будут отправлены, а затем обновлены часть профиля пользователя.

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

Есть ли способ использовать sfValidatorEmail Symfony внутри действия над возвращаемым значением поля электронной почты?

Поскольку регулярное выражение уже записано в валидаторе, я хотел бы использовать его повторно, но не знаю, как использовать его в действии после отправки несимфонной формы.

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

Здесь два подхода - вы можете в любом случае создать простую форму, начиная с sfForm / sfFormSymfony (не обязательно на основе ORM), которая просто содержит 2 поля, которые вы хотите. Таким образом, вы можете использовать существующую платформу проверки, а затем использовать $myForm->getValues() после того, как все будет проверено, чтобы получить значения для обновления вашего профиля.

В качестве альтернативы, как вы упомянули, вы можете использовать класс sfValidatorEmail в своем действии следующим образом:

$dirtyValue = "broken.email.address"
$v = new sfValidatorEmail();
try
{
  $v->clean($dirtyValue);
}
catch (sfValidatorError $e)
{
  // Validation failed
}

Последний подход быстро приводит к грязному коду, если у вас есть много значений, которые нужно очистить, и стоит вернуть логику в форму, чтобы обработать это обычным способом.

1 голос
/ 17 ноября 2010

Если вы отправляете форму с 2 элементами, она должна быть формой в конце редактирования и обновления, точка. Формы Symfony легки, нет никаких причин не использовать их. Вместо этого создайте специальную форму для этой цели:

class ProfileUpdateForm extends ProfileForm
{
  public function configure()
  {
    $this->useFields(array('email', 'other_field'));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...