git 9b7c044f079bfb583f5ec4d35a42a23b85868570
- Открытие формы
- Защита от CRSF
- Привязка модели к форме
- Метки
- Текстовые и скрытые поля
- Чекбоксы и радиокнопки
- Загрузка файлов
- Выпадающие списки
- Кнопки
- Макросы
- Формирование URL
{{ 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))
Laravel предоставляет простую защиту от подделки межсайтовых запросов. Сперва случайная последовательность символов (CSRF токен) помещается в сессию. Не переживайте - это делается автоматически. Эта строка также автоматически будет добавлена в вашу форму в виде скрытого поля. Тем не менее, если вы хотите сгенерировать HTML-код для этого поля, вы можете использовать метод token
.
echo Form::token();
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
!
echo Form::label('email', 'Адрес e-mail');
echo Form::label('email', 'Адрес e-mail', array('class' => 'awesome'));
Примечание: после создания метки, любой элемент формы созданный вами, имя которого соответствует имени метки, автоматически получит её ID.
echo Form::text('username');
echo Form::text('email', '[email protected]');
Примечание: методы hidden и textarea принимают те же параметры, что и метод text.
echo Form::password('password');
echo Form::email($name, $value = null, $attributes = array());
echo Form::file($name, $attributes = array());
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
echo Form::file('image');
Примечание: Для загрузки файлов необходимо, чтобы форма бфла открыта с параметром
'files'=>true
.
echo Form::select('size', array('L' => 'Большой', 'S' => 'Маленький'));
echo Form::select('size', array('L' => 'Большой', 'S' => 'Маленький'), 'S');
echo Form::select('animal', array(
'Кошки' => array('leopard' => 'Леопард'),
'Собаки' => array('spaniel' => 'Спаниель'),
));
echo Form::submit('Нажми меня!');
Примечание: вам нужно создать кнопку (<button>)? Используйте метод button - он принимает те же параметры, что submit.
К классу Form можно легко добавлять собственные методы; они называются "макросами". Вот как это работает. Сперва зарегистрируйте макрос с нужным именем и функцией-замыканием.
Form::macro('myField', function()
{
return '<input type="awesome">';
});
Теперь вы можете вызвать макрос, используя его имя:
echo Form::myField();
Урлы можно не только задавать явным образом, но и формировать исходя из имени роута назначения или названия экшна контроллера - см. helpers.