Как программировать с Yii2: Валидация...

Code Yii

Если вы спрашиваете «Что такое Yii?», ознакомьтесь с моим предыдущим учебным пособием: Введение в Yii Framework, в котором рассматриваются преимущества Yii и которое включает обзор нового в Yii 2.0, выпущенного в октябре 2014 года.

В этом курсе Программирование с Yii2 я направляю читателей на использование недавно обновленного Yii2 Framework для PHP. В этом уроке я собираюсь познакомить вас с валидаторами Yii2. Валидаторы упрощают код, необходимый для проверки ввода, то есть проверяют соответствие или несоответствие ввода данных, как правило, от пользователей через веб-формы.

В этих примерах мы продолжим использование кодовой базы приложения Hello, которую мы использовали в прошлых уроках. Используйте ссылки GitHub на этой странице, чтобы получить код.

Просто напоминание, я участвую в ниже выведенных комментариях. Меня особенно интересует, если у вас есть дополнительные идеи или вы хотите предложить темы для будущих учебников. Вы также можете связаться со мной @reifman в Twitter.

Что такое Валидатор?

Если вы являетесь веб-разработчиком, вы, вероятно, знаете, что пользователю нельзя доверять. Например, пользователи могут использовать методы SQL-инъекций, чтобы попытаться запустить запросы, которые изменяют или раскрывают пароли. Кто-то однажды запустил SQL-инъекцию против установки PHPList с открытым исходным кодом и смог открыть один из моих паролей (PHPList сохранял их в виде обычного текста). Чаще всего вы просто хотите убедиться, что данные, которые пользователи предоставляют, соответствуют типам, формам и диапазонам вашего приложения.

Создание валидаторов в PHP вручную требует времени. Yii Framework предоставляет тонну базовых функций проверки, поэтому нет необходимости создавать их с нуля. Но, если вам нужны какие-то пользовательские расширения, это просто.

Валидации - еще одна причина, по которой я считаю, что всегда имеет смысл создавать приложения на веб-фреймворках, таких как Yii, а не на ванильном PHP.

В предыдущих эпизодах мы также много говорили о генераторе кода Yii - Gii. Одним из преимуществ Gii является то, что он напишет соответствующие правила проверки для ваших моделей на основе определений типа SQL в таблице. Это большая экономия времени.

Какие проверки поддерживает Yii?

Вот список встроенных валидаторов Yii и ссылки на документацию:

  • BooleanValidator. Обеспечивает, что значение - true или false.
  • CaptchaValidator. Проверяет поле проверки формы CAPTCHA.
  • CompareValidator. Сравнивает два значения из формы или константы, например, x должно быть меньше 99.
  • DateValidator. Обеспечивает, что значение - это дата.
  • DefaultValueValidator. Не настоящий валидатор. Устанавливает значения по умолчанию для пустых полей.
  • NumberValidator. Обеспечивает, что значение является числовым, например, integer или float.
  • EmailValidator. Обеспечивает, что значение является действительным адресом электронной почты.
  • ExistValidator. Обеспечивает, что значение существует в другой таблице.
  • FileValidator. Обеспечивает наличие загруженного файла.
  • FilterValidator. Не настоящий валидатор. Выполняет преобразование по предоставленному значению.
  • ImageValidator. Проверяет изображение и свойства изображения.
  • RangeValidator. Обеспечивает, чтобы значение находилось в списке значений.
  • RegularExpressionValidator. Выполняет проверку с условием, определенным регулярным выражением.
  • RequiredValidator. Обеспечивает наличие значения.
  • SafeValidator. Не настоящий валидатор. Позволяет массивное присвоение отправленной веб-формы для включения атрибута. например $model->attributes = $_POST["Comment"];
  • StringValidator. Обеспечивает, что значение - строка.
  • UniqueValidator. Обеспечивает уникальное значение в таблице, например адрес электронной почты.
  • UrlValidator. Обеспечивает, что значение в формате URL, например, http://yourdomain.com

Как работает валидация Yii

Вот как Yii описывает поток проверки. Как правило, вы можете использовать сценарий по умолчанию и не нужно создавать свои собственные. Обычно вам нужно полагаться на Gii, чтобы генерировать правила или писать свои собственные.

Когда вызывается метод validate(), он делает следующие шаги для выполнения проверки:

  1. Определяет, какие атрибуты должны быть проверены путем получения списка атрибутов из yii\base\Model::scenarios() с использованием текущего сценария. Эти атрибуты называются активными атрибутами.
  2. Определяет, какие правила проверки следует использовать, получив список правил из yii\base\Model::rules(), используя текущий сценарий. Эти правила называются активными правилами.
  3. Использует каждое активное правило для проверки каждого активного атрибута, связанного с этим правилом. Правила проверки проверяются в том порядке, в котором они перечислены.

Согласно вышеуказанным шагам проверки атрибут будет проверяться, если и только если он является активным атрибутом, объявленным в scenarios() и связан с одним или несколькими активными правилами, объявленными в rules().

Пример правил проверки модели

Вот как может выглядеть набор правил проверки модели. Я взял их из приложения Планировщик встреч, модель Place:

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

Пример отображения ошибок

Существует несколько способов доступа к ошибкам, возвращаемым валидацией.

Вот пример получения массива ошибок в контроллере:

И вот пример использования функции Yii errorSummary в ActiveForms:

Вот как это выглядит:

Как программировать с Yii2: Валидация...

Расширенная проверка

В последующих эпизодах я также приведу примеры использования расширенных функций проверки:

  • Определение сценариев для выборочного применения правил для определенных ситуаций
  • Определение пользовательских сообщений об ошибках
  • События проверки для переопределения проверки или выполнения определенных функций до и/или после проверки
  • Условная проверка для выполнения правила валидации только в том случае, если конкретное событие истинно
  • Ad Hoc validation - для использования правил валидации независимо от отправки формы
  • Пользовательские валидаторы - для создания важных валидаций за пределами того, что Yii предлагает из коробки
  • Проверка на стороне клиента, чтобы использовать встроенную Yii ActiveForm проверку JavaScript, без необходимости обновления страницы.
  • Проверка AJAX для проверки подлинности AJAX на стороне сервера для расширения возможностей проверки JavaScript на стороне клиента

Теперь давайте начнем с примеров различных встроенных валидаторов.

Базовые валидаторы полей

Давайте посмотрим на некоторые из основных инструментов проверки поля, которые полезны для повседневной реализации.

Подготовка модели с использованием миграции и Gii

Как мы уже делали в ранних эпизодах этого курса, я собираюсь создать миграцию:

Я создам Sample модель, чтобы создать примерную таблицу и проверки с помощью Gii. Вот код миграции:

Затем мы выполним миграцию:

Далее мы будем использовать генератор кода Yii для построения модели:

Как программировать с Yii2: Валидация...

А затем CRUD файлы:

Как программировать с Yii2: Валидация...

Gii генерирует эти правила проверки образца:

Теперь давайте использовать их для работы и прохождения некоторых основных валидаторов.

Required Validator

RequiredValidator гарантирует наличие значения. Вы можете увидеть это выше для полей: rank, censorship и occurred.

Перейдите в форму создания Sample, сгенерированную Gii, например, http://localhost:8888/hello/sample/create. При проверке Yii ActiveForm на клиенте JavaScript будет отображать сообщение об ошибке даже при нажатии на одно из этих полей.

Как программировать с Yii2: Валидация...

Safe Validator

SafeValidator не является истинным валидатором. Он позволяет массовое присвоение переданной веб-формы для включения атрибута, например, $model->attributes = $_POST["Comment"]. Или, в созданном Gii SampleController, вы можете увидеть этот код:

Без безопасного правила в Sample модели (или другого правила) указанное значение не будет присвоено атрибутам модели. Это уменьшает вероятность наличия дополнительного вектора атаки без преднамеренного кода.

Default Value Validator

DefaultValueValidator не является истинным валидатором. Он устанавливает значения по умолчанию для пустых полей.

Давайте изменим правило для occurred, чтобы установить значение даты по умолчанию с использованием текущей даты. Мы также удалим Required валидатор, чтобы позволить Default валидатору заполнить значение.

Когда мы создаем новый Sample и оставляем пустое поле occurred, вы можете увидеть, что результирующее представление включает текущую дату, заполненную валидатором значений по умолчанию.

Как программировать с Yii2: Валидация...

Фильтры

FilterValidator также не является истинным валидатором. Он выполняет преобразование по предоставленному значению. Чаще всего вы можете использовать его, чтобы обрезать пробелы с концов строки.

FilterValidators определяются с помощью встроенных функций обратного вызова, таких как эта пользовательская функция проверки:

Поскольку trim - это функция PHP, мы можем просто объявить наше правило валидации строкой:

Если вы отправляете форму с начальными или конечными пробелами в поле thought, FilterValidator удалит их.

Теперь давайте посмотрим на некоторые встроенные валидаторы типов.

Валидаторы типов

Валидаторы типов гарантируют соответствие пользовательских данных определенным типам, часто тем, которые указаны в таблице базы данных. Gii автоматически сгенерирует их.

String Validator и Number Validator

StringValidator гарантирует, что значение является строкой. NumberValidator гарантирует, что значение является числовым, например, integer или float.

Ниже приведены примеры правил:

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

Вот как выглядят сообщения об ошибках проверки:

Как программировать с Yii2: Валидация...

Goodness со значением high выдает ошибку, потому что это не число, а rank со значением 27 проходит проверку. Censorship пуста (NULL), поэтому не выполняется проверка строки.

Boolean Validator

BooleanValidator обеспечивает значение true или false. Вы можете определить значения для true и false. Значение по умолчанию - целое число 0 или 1. Этот валидатор может быть более полезным, когда поле используется с выпадающим списком, например, Да / Нет.

Вот как я определил свое правило для Boolean:

Вот сообщение об ошибке Boolean валидатора:

Как программировать с Yii2: Валидация...

Date Validator

DateValidator гарантирует, что значение является правильно отформатированной датой, которую можно настроить с помощью атрибута format. С Yii ActiveForm в настоящее время это проверка на стороне сервера. Поэтому я также добавил требуемое правило для поля Occurred.

Вот мои определения правил с валидатором даты для поля Occused:

Вот как это выглядит, когда мы отправляем форму:

Как программировать с Yii2: Валидация...

Что дальше?

Следите за предстоящими уроками в моем курсе Программирование с Yii2, так как я продолжаю погружаться в разные аспекты структуры. В следующих двух эпизодах я проведу вас через оставшиеся валидаторы и покажу вам, как создавать продвинутые расширения для системы проверки Yii.

Вы также можете ознакомиться с моим курсом Построение стартапа с помощью PHP, в которой используется расширенный шаблон Yii2, когда я создаю реальное приложение.

Я приветствую пожелания по темам. Вы можете опубликовать их в комментариях ниже, твитнуть @reifman на Twitter или отправить мне по электронной почте на моем веб-сайте Lookahead Consulting.

Если вы хотите узнать, когда выйдет следующий урок по Yii2, проверьте мою страницу инструктора Tuts+. Она всегда включает все мои опубликованные статьи.

Ссылки по теме

  • Yii2 Руководство по проверке ввода пользователя
  • Валидаторы Yii2 (документация)
  • Yii2 Developer Exchange, мой ресурсный сайт Yii2
Теги: Code Yii
Рейтинг 68
Просмотры 14096

Комментарии 0

Отправить

Минуточку внимания

Похожие публикации

Лучшие публикации

Создание сайтов | Готовые сайты

Интро

Если вы спрашиваете «Что такое Yii?», ознакомьтесь с моим предыдущим учебным пособием: Введение в Yii Framework, в котором рассматриваются преимущества Yii и которое включает обзор нового в Yii 2.0, выпущенного в октябре 2014 года....