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

Программируем на Yii2: Специализированные Валидаторы

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Validations
How to Program With Yii2: AuthClient Integration With Twitter & Google

Russian (Pусский) translation by Alex Grigorovich (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. Валидаторы упрощают код, необходимый для проверки ввода, то есть проверяют соответствие или несоответствие ввода данных от пользователей, как правило, через веб-формы. В частности, мы рассмотрим некоторые уже встроенные программы проверки, которые являются общими для веб-разработки.

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

  • CaptchaValidator: проверяет поле формы CAPTCHA.
  • CompareValidator: сравнивает два значения из формы или константы, например, x должно быть меньше 99.
  • EmailValidator: гарантирует, что значение является действительным адресом электронной почты.
  • ExistValidator: Обеспечивает существование значений в другой таблице.
  • FileValidator: Обеспечивает наличие загруженного файла.
  • ImageValidator: Проверяет изображение и его свойства.
  • RangeValidator: Проверяет то, что значение находится в пределах списка допустимых значений.
  • RegularExpressionValidator: Выполняет проверку с условием, определенным регулярным выражением.
  • UniqueValidator: Обеспечивает уникальное значение в таблице, например, адрес электронной почты.
  • UrlValidator: Обеспечивает значение в формате URL, например, http://yourdomain.com.

Я проведу вас по примерам каждой из этих функций с помощью кодовой базы Hello, которая уже использовалась в прошлых руководствах и Building Your Startup Series, который также использует Yii2. Используйте ссылки GitHub на этой странице, чтобы получить код.

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

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

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

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

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

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

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

Теперь давайте посмотрим на следующий набор встроенных валидаторов Yii2.

Следующий набор проверок

Captcha Validator

Начнем с CaptchaValidator, который проверяет правильность ответа на поле проверки CAPTCHA. Инструменты CAPTCHA гарантируют, что именно человек заполнил форму, и мы надеемся что мы предотвратим автоматизированные сценарии отправки формы.

Вот пример Yii Captcha в действии:

Yii2 Validators CAPTCHA Validator

В кодовой базе Hello я упростил форму, чтобы включить поля Thought и Captcha. Ниже приведены определения правил кода модели:

Captcha не является частью нашей схемы базы данных - она используется только для проверки формы. Поэтому я добавил атрибут модели для него, а именно, public $captcha;.

Вот код для формы. Мы должны включить библиотеку Captcha сверху.

Вот как выглядит проверка Captcha в действии:

Yii2 Validators Sample CAPTCHA validation error

Если вы нажмете Captcha, Yii создаст новое изображение.

Compare Validator

Теперь перейдем к CompareValidator. Этот валидатор сравнивает два значения из формы или значения одной формы с константой, например, x должен быть меньше 99.

Для этого примера, я хочу, чтобы убедиться, что вводимые пользователем данные для обозначения ранга больше чем ноль но меньше или равно 100.

Во-первых я добавить поле ввода в нашу форму для атрибута ранга:

Затем я добавлю два правила проверки для нашей модели:

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

Вот как наша форма выглядит когда пользователь передает недопустимый атрибут:

Yii2 Validators Compare

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

Yii2 Validators The Compare validator with custom error message

Реализация довольно проста, заключается в добавлении атрибута сообщения:

Обновление нашей схемы для большего числа проверок

Для некоторых из следующей тестов я попрошу вас добавить некоторые поля в базу данных.

В \migrations\m150219_235923_create_sample_table.php, мы добавим некоторые новые поля для проверки: email, URL, имя файла, и т.д.

Затем запустите миграцию чтобы очистить таблицу и затем заполнить её:

Теперь мы готовы к проверке email и URL.

Email & URL Валидаторы

EmailValidator обеспечивает проверку того, что значение является действительным адресом электронной почты, а UrlValidator проверяет то, что значение указано в формате URL, например http://yourdomain.com.

Это довольно просто создать правила для email и URL полей:

Вот код для формы. Обратите внимание, как я использую пользовательские метки для удобства формы:

Вот Валидаторы в действии:

Yii2 Validators The Email and URL Validators

Они очевидно весьма полезны для веб-приложений.

Валидатор наличия

ExistValidator очень полезен в определенных сценариях. Он может проверить то, что значение существует в другой таблице. И он может использоваться различными способами — вот некоторые примеры, приведенные в документации:

В Yii документации подчеркивается, что Существование может использоваться для "проверки того, что внешний ключ содержит значение, которое можно найти во внешней таблице."

В нашем примере я собираюсь создать правило, которое проверяет, что адрес электронной почты в форме уже существует в таблице наших зарегистрированных пользователей. Для этого мы используем targetClass, который говорит Yii, о том какой класс (или модель таблицы) нужен, чтобы найти адрес электронной почты пользователя для проверки.

Вот определение правила — включение нашей модели пользователя в начало:

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

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

Yii2 Validators Exist with Email Lookup

Вы можете узнать больше о проверках на существование и их перестановках здесь.

Валидаторы файлов и изображений

Далее я покажу вам примеры FileValidator, который убеждается в наличии, MIME-типе и размере загружаемого файла, и ImageValidator, который проверяет наличия изображения и его свойства.

Чтобы изучить средства проверки файлов и изображений, давайте взглянем на пример из серии Ваш Startup с помощью PHP: Настройки пользователя, Изображение профиля и Контактные данные. В этом эпизоде в модели UserSettings мы позволяем пользователям загрузить файл для их профиля.

Атрибут изображения принимает размер загружаемого файла:

FileValidators проверяет то, что файл изображения подходящего расширения и его размер меньше чем 100,000 байт.

ImageValidator также проверяет тип расширения, а также ширину и высоту изображения.

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

Yii2 Validators Image and File Validation

Это моя помощь для тех кто любит использовать мой код в качестве примера.

Диапазон в Валидаторе

Существует RangeValidator, который проверяет, то что значение находится в пределах списка допустимых значений.

В нашем примере давайте добавим поле для проверки цензуры для формы:

Затем мы добавим RangeValidator который будет соответствовать ответу да или нет в строке:

Вот пример RangeValidator в действии:

Yii2 Validators Range In Validator

Валидатор регулярных выражений

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

В нашем примере я использую следующее регулярное выражение которое соответствует законченому предложению с буквенно-цифровыми символами. Это означает, что они должны заканчиваться либо (!,? или .) и не содержать числа.

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

Yii2 Validator Regular Expression Match Failure

Вот правильное предложение:

Yii2 Validator Regular Expression Match Success

Вам также может понравиться статья восемь регулярных выражений которые вы должны знать (Tuts+) как пример для общих шаблонов регулярных выражений.

Уникальный Валидатор

Наконец рассмотрим UniqueValidator, который проверяет, то что значение является уникальным в пределах таблицы данных, например адрес электронной почты или пути.

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

В коде для Планировщика собраний (в последних эпизодах учебника) в модели Place (\frontend\models\Place.php) мы используем валидаторы несколькими способами:

Во-первых мы используем уникальное правило пути для увеличения SluggableBehavior, которое лишнее; но вы можете увидеть проверку формата.

Во-вторых, мы проверяем то, что результаты поиска Google Places Autocomplete находятся в скрытом поле google_place_id, уникальные, и пока еще не существуют в таблице Places. По существу мы предотвращаем повторяющиеся ID для Google Place.

Большая часть этого происходит потому что уникальный валидатор Yii2 позволяет нам обеспечить проверку уникальности видимой области (searchbox), в то время как проверка вторичного столбца возвращется через AJAX от Google (google_place_id).

В-третьих, мы обеспечиваем проверку обоих полей name и full_address на уникальность. Другими словами повторяющиеся имена мест, это хорошо. Там могут быть мириады Starbucks. Однако, мы не хотим чтобы кто-либо вводил то же самое  расположение Starbucks дважды.

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

Ниже приведен пример этого в действии:

Yii2 Validators Unique

Что дальше?

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

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

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

Я буду рад вашим предложениям и вопросам. Можно опубликовать их в комментариях ниже, найти меня @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.