Phalcon PHP – проверка формы и модели

Phalcon поддерживает 2 компонента проверки:

Phalcon\Validation\Validator Phalcon\Mvc\Model\Validator 

Я не знаю, как использовать их в моей ситуации. У меня есть регистрационная форма:

  • CSRF
  • имя пользователя
  • пароль
  • Повторите пароль
  • Эл. адрес
  • Повторно отправить электронное письмо
  • кнопка отправки

Я создал регистрационную форму следующим образом:

 class RegistrationForm extends \Phalcon\Forms\Form { public function initialize() { $csrf = new \Phalcon\Forms\Element\Hidden('csrf'); $csrf->addValidator(new \Phalcon\Validation\Validator\Identical(array( 'value' => $this->security->getSessionToken(), 'message' => 'CSRF validation failed' ))); $username = new \Phalcon\Forms\Element\Text('username'); $username->addFilter('trim'); $username->addValidator(new PresenceOf(array( 'message' => 'Username is required.', ))); $username->addValidator(new StringLength(array( 'min' => 6, 'messageMinimum' => 'Username must be at least 6 characters.' ))); // ... } } 

И это мой контроллер / действие:

 class UserController extends \Phalcon\Mvc\Controller { public function registerAction() { $form = new RegistrationForm(); if ($this->request->isPost()) { if ($form->isValid($this->request->getPost())) { // Test only var_dump($this->request->getPost()); exit; } else { // Test only foreach ($form->getMessages() as $message) { echo $message, '<br/>'; } exit; } } $this->view->form = $form; } } 
  1. Когда мы используем валидатор модели и наоборот?
  2. Можем ли мы объединить их и как?
  3. Я хочу знать правильный способ реализовать это действие регистра с использованием модели и немодельного валидатора для проверки csrf, идентичного пароля, имени пользователя и уникальности электронной почты.

Спасибо за помощь!

Перед отправкой данных в базу данных используется валидатор модели. Часто данные (тип / структура / иерархия) в вашем POST и в вашей модели будут различаться, например, одна форма получает входные данные, относящиеся к двум моделям, оба из которых будут обновляться. Таким образом, после получения данных POST вы хотите проверить, что это действительно так, и при сохранении двух независимых моделей вы также хотите проверить, что они действительны.

У Phalcon есть компонент проверки , который является базовым классом для всей проверки. Он работает точно так же, как и проверка формы в вашем коде выше.

Я не большой поклонник того, как весь бизнес валидации внедрен в Phalcon – он не дает вам контроля уровня зерна и существует сильная зависимость между валидацией и валидаторами. Тем не менее, он отлично работает в области проверки формы и модели. Нет аккуратного или аккуратного способа повторного использования одних и тех же валидаторов, но есть некоторые попытки поиска , вы можете использовать свое воображение 🙂

Чтобы реализовать действие вашего регистра, вы должны использовать только средство проверки формы, чтобы отфильтровать ввод пользователя. Возможно, я ошибаюсь, но модели Phalcon автоматически проверяют данные на основе метаданных в полях, поэтому все, что вам нужно беспокоиться, это ваш POST-вход. Большая работа с документами моделей охватывает этот предмет подробно, я уверен, что вы уже были там.