Поддержите проект сделав пожертвование.

Формы и HTML

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.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. Но это еще не всё! Если в сессии будет переменная, чьё имя соответствует имени текстового поля, то будет использовано это значение, а не свойство модели.

Итак, приоритет выглядит следующим образом:

  1. Flash-переменная сессии (старый ввод)
  2. Напрямую переданные значения в запрос
  3. Свойство модели

Это позволяет вам быстро строить формы, которые не только привязаны к свойствам модели, но и легко заполняются повторно, если произошла какая-нибудь ошибка на сервере.

Примечание: при использовании 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', '[email protected]');

Примечание: методы 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.