-
Notifications
You must be signed in to change notification settings - Fork 52
Ru:Form
Форма «Form» − это объект предназначенный для описанный наборов данных, которые мы ожидаем извне и правил работы с ними. Состоит форма из набора примитивов «Primitive» типы данных, каждый из которых отвечает за импорт, фильтрацию и валидацию данных.
Пример: Валидация примитивных данных (email, пароль)
К нам приходят данные из WEB-формы (email, пароль и повтор пароля)
Как правило в формы мы импортируем из HttpRequest'а, поэтому и здесь создадим и заполним его
<?php
$request = HttpRequest::create()->
setGet($_GET)->
setPost($_POST)->
setSession($_SESSION);
$form = Form::create();
Добавляем примитив email
$form->add(
Primitive::string('email')->
setAllowedPattern(
PrimitiveString::MAIL_PATTERN
)->
setImportFilter(
Filter::lowerCase()
)->
required()
);
Добавляем примитив пароль и подтверждение пароля
$form->add(
Primitive::string('password')->
setMin(5)->
setMax(14)->
required()
)->add(
Primitive::string('password_confirm')
);
Добавляем правило проверки совпадения двух полей (password == password_confirm)
$form->addRule(
'is_password_confirmed',
Expression::isTrue(
Expression::eq(
FormField::create('password'),
FormField::create('password_confirm')
)
)
);
Импортируем данные в форму из $_GET
$form->import($request->getGet());
Если часть данных приходит из $_POST
$form->importMore($request->getPost());
Или еще круче, email у нас приходит из сессии
$form->importOneMore('email', $request->getSession());
Даже если мы сами хотим импортировать, к примеру email
$form->importValue('email', '[email protected]');
Вешаем сообщения на возможные ошибки в форме.
$form->addMissingLabel('email', 'Поле "email" обязателен для заполнения!');
$form->addWrongLabel('email', 'Поле "email" содержит некорректное значение!');
$form->addMissingLabel('password', 'Поле "пароль" обязателен для заполнения!');
$form->addWrongLabel('password', 'Поле "пароль" допустимо от 5 до 14 символов!');
$form->addWrongLabel('is_password_confirmed', 'Пароли должны совпадать!');
Теперь собственно цель: Узнаем были-ли ошибки в форме
$errors = $form->getErrors();
if ($errors) {
// Ooop's!
}
Возвращает массив из ( 'имя примитива' => 'errorType' ) где errorType тип ошибки к примеру для missingType это 2 для wrongType это 1 Также могут быть custom-ные типы ошибок определенные разработчиком. В случае если массив пуст это свидетельствует о том что ошибок в форме нет! :-)
Для вывода конкретных сообщений пользуемся
$errorText = $form->getTextualErrorFor('email');
if ($errorText) {
echo $errorText;
}
?>