Skip to content

Ru:Form

soloweb edited this page Apr 24, 2012 · 6 revisions

Форма

Форма «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;
}

?>
Clone this wiki locally