-
Notifications
You must be signed in to change notification settings - Fork 52
Ru:Form
soloweb edited this page Apr 19, 2011
·
6 revisions
Форма «Form» − это объект предназначенный для описанный наборов данных, которые мы ожидаем из вне и правил работы с ними. Состоит форма из набора примитивов «Primitive» типы данных, каждый из которых отвечает за импорт, фильтрацию и валидацию данных.
Пример: Валидация примитивных данных (email, пароль)
К нам приходят данные из WEB-формы (email, пароль и повтор пароля)
<?php
/***************************************************************************
* Copyright (C) 2010 by Kutcurua Georgy Tamazievich *
* email: [email protected], icq: 723737, jabber: [email protected] *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/
/* $Id$ */
// Создаем пустую форму
$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( $_POST );
//Если часть данных приходит из $_GET
$form->importMore( $_GET );
//Или еще круче, email у нас приходит из сесси
$form->importOneMore('email', $_SESSION);
//Даже если мы сами хотим импортировать, к примеру email
$form->importValue('email', '[email protected]');
//Вешаем сообщения на возможные ошибки в форме.
$form->addMissingLabel(
'email',
_('Поле "email" обязателен для заполнения!')
);
$form->addWrongLabel(
'email',
_('Поле "email" содержит некорректное значение!')
);
$form->addMissingLabel(
'password',
_('Поле "пароль" обязателен для заполнения!')
);
$form->addWrongLabel(
'password',
_('Поле "пароль" допустимо от 5 до 14 символов!')
);
$form->addWrongLabel(
'password_confirm',
_('Пароли должны совпадать!')
);
//Для вывода сообщений пользуемся
$errorText = $form->getTextualErrorFor('email');
if( $errorText )
echo $errorText;
/*
* Узнаем были-ли ошибки в форме
* Вовращает массив из ( 'имя примитива' => 'errorType' ) где errorType тип ошибки
* к примеру для missingType это 2 для wrongType это 1
* Также могут быть custom-ные типы ощибок определенные разработчиком.
*
* В случае если массив свидетельствует о том что ошибок в форме нет! :-)
*/
$errors = $form->getErrors();
?>