Изначально я вообще не хотел писать про данный хелпер, так как считаю его бесполезным и даже в чем-то вредным. Но некоторые уважаемые читатели моих уроков настаивали на его рассмотрении и я все-таки решился о нем написать, тем более, что мое мнение — это не последняя инстанция и действительно кто-то может захотеть использовать его на своих сайтах.
Итак, Хелпер 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. Надеюсь данный урок кому-то окажется полезным.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
Спасибо огромное за проявленный героизм!
Пропустили Form::textarea(). А вообще — полезная штука, очень очевидная — этот хелпер. Не пользуюсь радиобуттонами, картинками и селектами — в них невозможно установить специфичное value — оно инкрементное по умолчанию. Всё остальное — актуально. В последнее время тесновато мне на кохане — ухожу к Yii. Там лучше.
Почему пропустил. Есть же:
—
Идем дальше. Для создания области текста используется метод Form::textarea().
—
Да и value для радиобаттонов и селектов указывать можно и оно работает. А для картинок зачем value ? В любом случае его можно как атрибут передать.
Возможно этот хелпер и бывает полезен, но не со статическими формами.