Хелпер Form

Комментарии: 4  Просмотры: 15 011

Изначально я вообще не хотел писать про данный хелпер, так как считаю его бесполезным и даже в чем-то вредным. Но некоторые уважаемые читатели моих уроков настаивали на его рассмотрении и я все-таки решился о нем написать, тем более, что мое мнение — это не последняя инстанция и действительно кто-то может захотеть использовать его на своих сайтах.
Итак, Хелпер Form, как видно по названию, предназначен для работы с формами, а точнее для генерации формы и сопутствующих ей элементов. Открытие формы происходит с помощью метода Form::open(), который принимает два параметра: action, т.е. URL страницы, которой будут переданы данные и массив атрибутов, в котором могут содержаться метод передачи данных или атрибут enctype, указываемый при передаче файлов. Эти параметры необязательны и без них форма будет использовать метод POST и отправлять данные на текущую страницу.
В паре с Form::open() идет метод Form::close(), который не имеет никаких параметров и просто закрывает форму. В качестве примера данный код:

echo Form::open('comments', array('method' => 'get'));
echo Form::close();

сгенерирует вот такую форму:

<form action="/comments" method="get" accept-charset="utf-8"></form>

Идем дальше. Важный элемент практически любой формы — текстовое поле. Оно генерируется с помощью метода Form::input(). Первый параметр — это обязательное имя поля. Второй параметр — значение поля, то есть атрибут value. По умолчанию равен NULL. И третий параметр — это массив атрибутов. Опять же пример кода:

echo Form::input('login', 'Введите логин', array('class' => 'input'));

И результат его выполнения:

<input type="text" name="login" value="Введите логин" class="input" />

В дополнение скажу, что данный метод является самым важным в данном классе, так как большая часть методов для генерации остальных элементов формы использует именно его, просто передает другие атрибуты.
Скрытое поле генерируется с помощью метода Form::hidden(), поле для ввода пароля с помощью метода Form::password(), а поле загрузки файла с помощью Form::file(). Первые два метода принимают те же параметры, что и текстовое поле, а третий метод только название поля и массив атрибутов.
Для создания так называемых флажков (или чекбоксов) используется метод Form::checkbox. Он может принимать аж четыре параметра и только первый — название чекбокса, является обязательным. Остальные параметры — это значение (value) чекбокса, активность чекбокса (булево значение, по умолчанию нет — FALSE) и массив параметров. В качестве примера два чекбокса:

echo Form::checkbox('smoke', 1, TRUE, array('style' => 'margin-left:5px'));
echo Form::checkbox('drink', 1, FALSE);

Получаем вот такую белиберду:

<input type="checkbox" name="smoke" value="1" style="margin-left:5px" checked="checked" />
<input type="checkbox" name="drink" value="1" />

Почему белиберду ? Потому что рядом с чекбоксом обычно пишется какой-то текст. А значит нам нужно или разрывать php-теги или использовать конкатенацию. Смотрится жутковато.
Переключатели (или радиокнопки) создаются с помощью аналогично действующего метода Form::radio. Параметры те же. Не забудьте только указывать одинаковое имя для переключателей, которые нужно объединить в группу.
Идем дальше. Для создания области текста используется метод Form::textarea(). Опять же обязательным является только первый параметр — имя. Далее по порядку следуют: текст, который будет виден внутри области, массив параметров и так называемый double_encode в виде булева значения, при выключении (по умолчанию включено) которого не будут преобразовываться существующие html-сущности.
Переходим к спискам (селекторы). Создаваться они будут посредством метода Form::select(). Параметры тут уже немного другие. Обязательным является только первый параметр — имя списка. Далее идут массив с данными, которые будут включены в список (строки селектора), название или массив названий строк, которые будут выбраны (при этом по типу параметра определяется, будет ли это список с единичным или множественным выбором) и массив с атрибутами.
Пара списков в качестве примера:

echo Form::select('year', array(2005, 2006, 2007, 2008), 1);
 
echo Form::select('color', array('black', 'white', 'green', 'blue'), array(0, 2), array('id' => 'select'));
<select name="year">
<option value="0">2005</option>
<option value="1" selected="selected">2006</option>
<option value="2">2007</option>
<option value="3">2008</option>
</select>
 
<select id="select" name="color" multiple="multiple">
<option value="0" selected="selected">black</option>
<option value="1">white</option>
<option value="2" selected="selected">green</option>
<option value="3">blue</option>
</select>

Тег label, который служит для связи между меткой и элементом формы, создается с помощью Form::label() и принимает обязательный параметр — идентификатор для атрибута for и два необязательных параметра — текст внутри тега и массив с атрибутами.
Пример:

echo Form::label('username', 'name');

Результат:

<label for="username">name</label>

И остается у нас три вида кнопок: submit, image и button. У всех методов для формирования кнопок первые два параметра обязательны. Form::submit() принимает имя, значение и массив атрибутов. Form::image() принимает имя, значение, массив атрибутов (например, адрес картинки) и булево значение, которое при включении добавляет к отправляемому адресу индексный файл (если его использование конечно не запрещено). Form::button() принимает имя, текст кнопки и массив атрибутов.
Коды кнопок:

echo Form::submit('send', 'Отправить');
echo Form::image('send', NULL, array('src' => 'img/but.png'));
echo Form::button('send', 'save', array('type' => 'submit'));

И результат генерации в хтмл:

<input type="submit" name="send" value="Отправить" />
<input type="image" name="send" src="/img/but.png" />
<button type="submit" name="send">save</button>

Вот мы и рассмотрели все методы Хелпера Form. Надеюсь данный урок кому-то окажется полезным.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 4 коммент.

Спасибо огромное за проявленный героизм! :)

Пропустили Form::textarea(). А вообще — полезная штука, очень очевидная — этот хелпер. Не пользуюсь радиобуттонами, картинками и селектами — в них невозможно установить специфичное value — оно инкрементное по умолчанию. Всё остальное — актуально. В последнее время тесновато мне на кохане — ухожу к Yii. Там лучше.

Почему пропустил. Есть же:

Идем дальше. Для создания области текста используется метод Form::textarea().

Да и value для радиобаттонов и селектов указывать можно и оно работает. А для картинок зачем value ? В любом случае его можно как атрибут передать.

Возможно этот хелпер и бывает полезен, но не со статическими формами.



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.