MZZ.Framework 0.3.x: Документация
Разделы

3.10 Хелперы и формы

1. Основные хелперы
2. Создание собственных элементов форм
3. Валидация форм
4. Создание собственных валидаторов
1. Основные хелперы

Для генерации полей (элементов) формы в шаблоне используется механизм хелперов. Данное решение освобождает от необходимости заботиться о восстановлении значений формы, в случае неправильного её заполнения и о выделении ошибочно заполненных полей. Файлы с классами хелперов расположены в каталоге system/forms. Следует отметить, что хелперами генерируется валидный xhtml-код. Запускаются они из шаблона следующим образом:

{form->helper_name ...}

Хелперы могут принимать различные параметры, но есть и несколько общих:

Также могут быть указаны любые параметры html-синтаксиса, используемые в тегах. Например: style, class, id. Примеры их использования:

{form->text style="form_text_field" id="some_field" name="login"}

К использованию доступны следующие хелперы:

2. Создание собственных элементов форм

Mzz позволяет легко расширять список доступных хелперов форм. Все хелперы располагаются в каталоге forms. Создание элемента рассмотрим на примере элемента формы типа text.
Все элементы формы наследуются от класса formElement. Создадим файл с именем formAdvancedTextField.php в каталоге forms:

<?php
 
class formAdvancedTextField extends formElement
{
    public function __construct()
    {
        $this->setAttribute('type', 'text');
        $this->setAttribute('value', '');
    }
 
    public function render($attributes = array(), $value = null)
    {
        return $this->renderTag('input', $attributes);
    }
}
 
?>

Всё. Теперь в шаблонах можно использовать новый тип хелпера. Запуск его не будет отличаться от запуска базовых хелперов:

{form->advancedText name="new_helper" value="new helper value"}
3. Валидация форм

В mzz генерация и валидация форм разделены. Стандартные правила валидации располагаются в каталоге system/forms/validators. Для валидации формы вначале нужно подключить класс валидатора форм и создать объект этого класса. Это делается так:

fileLoader::load('forms/validators/formValidator');
$validator = new formValidator();

Единственным аргументом для конструктора класса formValidator является имя поля, свидетельствующего о том, что форма отправлена. По умолчанию используется значение submit. Для добавления правила валидации формы используется следующий синтаксис:

$validator->add('имя валидатора', 'имя поля', 'сообщение об ошибке', 'дополнительные параметры');

В базовый набор валидаторов входят следующие:

4. Создание собственных валидаторов

Валидаторы, так же как и хелперы, также могут быть легко расширены новыми. Создаваемые правила должны быть отнаследованы от базового класса formAbstractRule. Как и в случае с callback-функциями, валидация считается пройденной, если валидатор возвращает true, и проваленной в противном случае. Рассмотрим процесс создания валидаторов на примере. Пусть это будет новый валидатор, который проверяет, что введённое число попадает в определёный диапазон.

Создадим файл formRangeRule.php в каталоге system/forms/validators:

<?php
 
class formRangeRule extends formAbstractRule
{
    public function validate()
    {
        // проверяем, что введённое значение больше либо равно минимального
        // и меньше либо равно максимального
        return $this->value >= $this->params[0] && $this->value <= $this->params[1];
    }
}
 
?>

Полученный валидатор можно использовать следующим образом:

<?php
 
$validator->add('range', 'hour', 'Введённое число не входит в интервал от 1 до 24', array(1, 24));
 
?>