Skip to content

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();

?>
Clone this wiki locally