Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

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

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Timestamp Behavior
How to Program With Yii2: Specialized Validations

Russian (Pусский) translation by Anna Goorikova (you can also view the original English article)

Final product image
What You'll Be Creating

Если вы спрашиваете «Что такое 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:

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

Using Yii errorSummary to display form errors

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

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

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

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

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

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

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

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

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

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

Validation Yiis Gii Model Generator

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

Validation Yiis Gii CRUD Generator

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

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

Required Validator

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

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

Validators Required With JavaScript Client Side Validation

Safe Validator

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

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

Default Value Validator

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

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

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

Validators Default Value

Фильтры

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

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

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

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

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

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

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

String Validator и Number Validator

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

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

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

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

Validators Number and String

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

Boolean Validator

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

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

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

Validators Boolean

Date Validator

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

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

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

Validators Date

Что дальше?

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

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

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

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

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.