Открытие формы
{{ 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))
Защита от CSRF
Добавление CSRF-строки в форму
Laravel предоставляет простую защиту от подделки межсайтовых запросов. Сперва случайная последовательность символов помещается в сессию. Если вы используете метод PHPForm::open
с методами PHPPOST
, PHPPUT
или PHPDELETE
, то CSRF-последовательность будет автоматически добавлена в вашу форму в виде скрытого поля. Есть и другой вариант, если вы хотите сгенерировать HTML-код для этого поля, вы можете использовать метод PHPtoken()
:
echo Form::token();
Присоединение CSRF-фильтра к маршруту
Route::post('profile', array('before' => 'csrf', function () {
//
}));
Привязка модели к форме
Зачастую вам надо представить содержимое модели в виде формы. Чтобы сделать это, используйте метод PHPForm::model()
:
echo Form::model($user, array('route' => array('user.update', $user->id)))
Теперь, когда вы генерируете элемент формы — такой, как текстовое поле — значение свойства модели, соответствующее этому полю, будет присвоено ему автоматически. Так, для примера, значение текстового поля, названного email, будет установлено в значение свойства модели пользователя email. Но это еще не всё! Если в сессии будет переменная, чьё имя соответствует имени текстового поля, то будет использовано это значение, а не свойство модели.
Итак, приоритет выглядит следующим образом:
- Переменная сессии (старый ввод)
- Напрямую переданные значения в запрос
- Свойство модели
Это позволяет вам быстро строить формы, которые не только привязаны к свойствам модели, но и легко заполняются повторно, если произошла какая-нибудь ошибка на сервере.
Внимание: при использовании PHPForm::model()
всегда закрывайте форму при помощи метода PHPForm::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');
Внимание: методы PHPhidden()
и PHPtextarea()
принимают те же параметры, что и метод PHPtext()
.
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);
добавлено в 4.2 ()
Загрузка файлов
echo Form::file('image');
Форма должна быть открыта со значением параметра PHPfiles
равным PHPtrue
.
Выпадающие списки
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::selectRange('number', 10, 20);
Генерация списка с названиями месяцев
echo Form::selectMonth('month');
Кнопки
Генерация кнопки отправки формы
echo Form::submit('Нажми меня!');
Вам нужно создать кнопку (xml<button>
)? Используйте метод PHPbutton()
— он принимает те же параметры, что и PHPsubmit()
.
Макросы
Регистрация макроса для PHPForm
К классу PHPForm
можно легко добавлять собственные методы; они называются «макросами». Вот как это работает. Сперва зарегистрируйте макрос с нужным именем и функцией-замыканием:
Form::macro('myField', function () {
return '<input type="awesome">';
});
Теперь вы можете вызвать макрос, используя его имя.
echo Form::myField();
Генерация URLs
За подробностями по генерации URLs загляните в документацию по функциям.