Правила проверки полей формы
При создании форм используются поля, описанные в разделе Типы данных. Независимо от способа создания формы (из модели / без модели) поля имеют свойства, которые заданы по умолчанию (имеется ввиду наличие этих свойств у объектов, при этом конкретные значения могут быть не заданы).
- для всех типов полей: "required", "must_match"
- char: "regexp", "captcha", "length", "min_length", "max_length", "min_max_length", "unique"
- int, float: "zero_allowed", "positive"
- email, phone, url, redirect: "format", а также свойства, наследуемые от "char"
- text: свойства, наследуемые от "char"
- file, image: "allowed_extensions", "allowed_mime_types" (в виде массива)
На основании этих свойств происходит изначальная проверка полей форм методом "validate()".
//Задаем поля будущей формы $fields = array(array("Имя", "char", "name", array("max_length" => 20)), array("Код купона", "char", "cupon", array("length" => 8)), array("О себе", "text", "about"), array("Email", "email", "email", array("unique" => true)), array("Пароль", "password", "password", array("min_length" => 5)), array("Повтор пароля", "password", "password_repeat", array("must_match" => "password")), array("Captcha", "char", "code", array("captcha" => "extra/captcha-simple/"))); $form = new Form($fields); //Создаем объект формы //Задаем обязательные поля $form -> setRequiredFields(array("name", "password", "password_repeat", "code")); $form -> addField(array("Фотография", "image", "photo", array("files_folder" => "uploads"))); if(!empty($_POST)) { $form -> getDataFromPost() -> validate(); ... }
Таким образом при проверке полей будут задействованы правила "max_length", "length", "required", "min_length", "must_match" для соответствующих полей. Исходя из конкретной ситуации, можно переопределить заданные (или существующие, но пустые) правила для полей или назначить новые.
Добавление нового правила
Для добавления нового правили нужно вызвать метод "addRule" с массивом параметров в следующем порядке:
- название поля (также может быть массивом или символом "*" для всех полей)
- название свойства (характерное для типа данных, к которому относится данное поле)
- значение свойства для проверки (если передать значение в виде "->", то будет изменено только сообщение а правило останется в прежнем виде, это удобно для изменения сообщения об ошибках для полей, проверяемых регулярными выражениями: int, float, email, phone, url, redirect)
- сообщение, которое выводится если проверка не пройдена (если данный параметр не передан, будет выводиться системное сообщение для данного правила)
//Делаем поле обязательным для заполнения $form -> addRule("cupon", "required", true, "Для регистрации необходимо ввести код купона."); //Делаем все поля обязательными для заполнения $form -> addRule("*", "required", true, "Данное поле должно быть заполнено."); //Добавляем проверку по регулярному выражению $form -> addRule("cupon", "regexp", "/^d+$/", "Код купона может содержать только цифры."); //Задаем минимальную длину для вводимого текста $form -> addRule("about", "min_length", 200, "Для рассказа о себе необходимо не менее 200 символов."); //Задаем максимальную длину для нескольких полей $form -> addRule(array("name", "cupon", "email"), "max_length", 100, "Длина поля не должна превышать 100 символов."); //Зададим новое сообщение при проверке на уникальность email адреса //(взамен сообщения по умолчанию) $form -> addRule("email", "unique", true, "Данный email адрес уже используется другим пользователем."); //Новое сообщение при проверке на корректность email адреса $form -> addRule("email", "format", "/^[-a-z0-9_.]+@[-a-z0-9_.]+.[a-z]{2,5}$/i", "Введите корректный e-mail"); //Новое сообщение (старый формат) при проверке на корректности email адреса $form -> addRule("email", "format", "->", "Введите корректный e-mail"); //Проверка повторного значения ввода пароля $form -> addRule("password_repeat", "must_match", "password", "Неверный повтор пароля"); //Ограничение по типам загружаемых файлов $form -> addRule("photo", "allowed_extensions", array("gif", "jpg"), "Выберите файл gif или jpg");
Удаление правила
Для удаления правила необходимо в метод "removeRule" передать 2 аргумента: название поля и название правила, которое необходимо удалить.
//Не проверять минимальную длину $form -> removeRule("name", "max_length"); //Поле не обязательно для заполнения $form -> removeRule("cupon", "required"); //Поля не обязательны для заполнения $form -> removeRule(array("name", "email"), "required"); //Уберем проверку email на уникальность $form -> removeRule("email", "unique"); //Уберем проверку всех полей на максимальную длину $form -> removeRule("*", "max_length");
Дополнительно о форматах полей email, phone, url, redirect
Значение поля типа "url" не может быть просто числовым, а также состоять из последовательности одинаковых знаков, отличных от буквенных (например "---" или "/-/") это обязательное правило не зависимо от задаваемого формата.
Ниже представлены форматы (свойство "format") в виде регулярных выражений, по умолчанию задаваемые системой. Их можно переопределить, задав соответствующие свойства методом "addRule".
- url - "/^[a-zd-]+$/"
- redirect - "/^https?://(www.)?(([a-zd-]+.)+[a-z]{2,4}|localhost)((/|?).*)*$/"
- email - "/^[-a-z0-9_.]+@[-a-z0-9_.]+.[a-z]{2,5}$/i"
- phone - "/^[+ds()-]+$/"
Отображение ошибок проверки
//Занесение значений в форму и их проверка if(!empty($_POST)) { $form -> getDataFromPost() -> validate(); ... } //Вывод всех ошибок одним списком echo $form -> displayErrors(); //Вывод формы в виде таблицы, ошибки расположены рядом с полями echo $form -> setDisplayWithErrors() -> display(); //Вывод формы в виде блоков, ошибки расположены рядом с полями echo $form -> setDisplayWithErrors() -> displayVertical();
Предыдущий раздел
Настройка полей формы