forked from onPHP/onphp-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Ru:Form
AlexeyDsov edited this page Apr 20, 2011
·
6 revisions
Форма «Form» − это объект предназначенный для описанный наборов данных, которые мы ожидаем из вне и правил работы с ними. Состоит форма из набора примитивов «Primitive» типы данных, каждый из которых отвечает за импорт, фильтрацию и валидацию данных.
Пример: Валидация примитивных данных (email, пароль)
К нам приходят данные из WEB-формы (email, пароль и повтор пароля)
<?php
//Как правило в формы мы импортируем из HttpRequest'а, поэтому и здесь создадим и заполним его
$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->add(
Primitive::rule('is_password_confirmed')->
// Из какой формы будут братся значения для валидации
setForm($form)->
// Expression условие
setExpression(
// При условии того что выражение будет истинно
Expression::isTrue(
// Если варажения эквивалентны
Expression::eq(
FormField::create('password'),
FormField::create('password_confirm')
)
)
)
);
// Импортируем данные в форму
$form->import($request->getGet());
//Если часть данных приходит из $_GET
$form->importMore($request->getPost());
//Или еще круче, email у нас приходит из сесси
$form->importOneMore('email', $request->getSession());
//Даже если мы сами хотим импортировать, к примеру email
$form->importValue('email', 'example@example.com');
//Вешаем сообщения на возможные ошибки в форме.
$form->addMissingLabel(
'email',
('Поле "email" обязателен для заполнения!')
);
$form->addWrongLabel(
'email',
('Поле "email" содержит некорректное значение!')
);
$form->addMissingLabel(
'password',
('Поле "пароль" обязателен для заполнения!')
);
$form->addWrongLabel(
'password',
('Поле "пароль" допустимо от 5 до 14 символов!')
);
$form->addWrongLabel(
'is_password_confirmed',
('Пароли должны совпадать!')
);
//Для вывода сообщений пользуемся
$errorText = $form->getTextualErrorFor('email');
if( $errorText ) {
echo $errorText;
}
/*
* Узнаем были-ли ошибки в форме
* Вовращает массив из ( 'имя примитива' => 'errorType' ) где errorType тип ошибки
* к примеру для missingType это 2 для wrongType это 1
* Также могут быть custom-ные типы ощибок определенные разработчиком.
*
* В случае если массив свидетельствует о том что ошибок в форме нет! :-)
*/
$errors = $form->getErrors();
?>