Формы и HTML
11.x
.
Почему это важно?
Открытие формы
Открытие формы
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
По умолчанию используется метод POST
, но вы можете указать другой метод:
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
Примечание: так как HTML-формы поддерживают только методы
POST
иGET
, методыPUT
иDELETE
будут автоматически сэмулированы и переданы в скрытом поле_method
.
Также вы можете открыть форму, которая может указывать на именованный(-е) маршрут или действие контроллера:
echo Form::open(array('route' => 'route.name'))
echo Form::open(array('action' => 'Controller@method'))
Вы можете передавать им параметры таким образом:
echo Form::open(array('route' => array('route.name', $user->id)))
echo Form::open(array('action' => array('Controller@method', $user->id)))
Если ваша форма будет загружать файлы, добавьте опцию files
:
echo Form::open(array('url' => 'foo/bar', 'files' => true))
Защита от CRSF
Добавление CRSF-токена в форму
Laravel предоставляет простую защиту от подделки межсайтовых запросов. Сперва случайная последовательность символов (CSRF токен) помещается в сессию. Не переживайте – это делается автоматически. Затем, если вы используете Form::open()
и формируете http-запрос типа POST
, PUT
или DELETE
, эта строка также автоматически будет добавлена в вашу форму в виде скрытого поля. Тем не менее, если вы хотите сгенерировать HTML-код для этого поля вручную, вы можете использовать метод token
.
echo Form::token();
Присоединение CRSF-фильтра к маршруту
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
Привязка модели к форме
Открытие формы для модели
Зачастую вам надо представить содержимое модели в виде формы. Чтобы сделать это, используйте метод Form::model
.
echo Form::model($user, array('route' => array('user.update', $user->id)))
Теперь, когда вы генерируете элемент формы – такой, как текстовое поле – значение свойства модели, соответствующее этому полю, будет присвоено ему автоматически. Так, для примера, значение текстового поля, названного email
, будет установлено в значение свойства модели пользователя email
. Но это еще не всё! Если в сессии будет переменная, чьё имя соответствует имени текстового поля, то будет использовано это значение, а не свойство модели.
Итак, приоритет выглядит следующим образом:
- Flash-переменная сессии (старый ввод)
- Напрямую переданные значения в запрос
- Свойство модели
Это позволяет вам быстро строить формы, которые не только привязаны к свойствам модели, но и легко заполняются повторно, если произошла какая-нибудь ошибка на сервере.
Примечание: при использовании
Form::model
всегда закрывайте форму при помощи методаForm::close
!
Метки
Генерация элемента метки (label)
echo Form::label('email', 'Адрес e-mail');
Передача дополнительных атрибутов для тега
echo Form::label('email', 'Адрес e-mail', array('class' => 'awesome'));
Примечание: после создания метки, любой элемент формы созданный вами, имя которого соответствует имени метки, автоматически получит её ID.
Текстовые и скрытые поля
Создание текстового поля ввода
echo Form::text('username');
Указание значения по умолчанию
echo Form::text('email', 'example@gmail.com');
Примечание: методы hidden и textarea принимают те же параметры, что и метод text.
Генерация поля ввода пароля
echo Form::password('password');
Генерация других полей
echo Form::email($name, $value = null, $attributes = array());
echo Form::file($name, $attributes = array());
Чекбоксы и кнопки переключения
Генерация чекбокса или кнопки переключения (radio button)
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
Генерация нажатого чекбокса или радиокнопки, выбранной по умолчанию
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
Числовое поле
Генерация числового поля
echo Form::number('name', 'value');
Загрузка файлов
Генерация поля загрузки файла
echo Form::file('image');
Примечание: Для загрузки файлов необходимо, чтобы форма бфла открыта с параметром
'files'=>true
.
Выпадающие списки
Генерация выпадающего списка
echo Form::select('size', array('L' => 'Большой', 'S' => 'Маленький'));
Генерация списка со значением по умолчанию
echo Form::select('size', array('L' => 'Большой', 'S' => 'Маленький'), 'S');
Генерация списка с группами (optgroup)
echo Form::select('animal', array(
'Кошки' => array('leopard' => 'Леопард'),
'Собаки' => array('spaniel' => 'Спаниель'),
));
Кнопки
Генерация кнопки отправки формы
echo Form::submit('Нажми меня!');
Примечание: вам нужно создать кнопку (<button>)? Используйте метод button – он принимает те же параметры, что submit.
Макросы
Регистрация макроса для Form
К классу Form можно легко добавлять собственные методы; они называются “макросами”. Вот как это работает. Сперва зарегистрируйте макрос с нужным именем и функцией-замыканием.
Form::macro('myField', function()
{
return '<input type="awesome">';
});
Теперь вы можете вызвать макрос, используя его имя:
Вызов макроса
echo Form::myField();
Урлы можно не только задавать явным образом, но и формировать исходя из имени роута назначения или названия экшна контроллера – см. helpers.