Возьмём пример формы из конца предыдущей статьи. Там у нас был маршрут для формы (по адресу
/mouse/form/
) и для результата (по адресу /mouse/result/
):
<?php
Route::get('mouse/form', 'MouseController@form');
Route::get('mouse/result', 'MouseController@result');
?>
Саму формы мы чуть модифицируем, указав нужный метод POST:
<form action="/mouse/result/" method="post">
<input type="text" name="text">
<input type="submit">
</form>
С этого момента стоит вспомнить о нюансах. Проблема в том, что мы использовали метод GET в "Route::get", поэтому если отправить форму методом POST, то скрипт просто не увидит пересылаемые данные. Поэтому метод "get" класса "Route" надо заменить на "post" для страницы с результатом:
<?php
Route::post('mouse/result', 'MouseController@result');
?>
С таким кодом маршрут будет принимать "POST" запросы. Причем данные будут попадать в тот же объект Request, в котором ранее мы принимали GET данные.Проверка метода запроса
При необходимости можно проверить каким методом (GET или POST) отправлялись данные. Делается это с помощью методов method и isMethod:<?php
$method = $request->method();ы
echo $method; // распечатает слово 'get' или 'post'
if ($request->isMethod('get')) {
// этот код выполнится, если используется метод GET
}
if ($request->isMethod('post')) {
// этот код выполнится, если используется метод POST
}
?>
Отправка и получение данных одновременно
Запросы GET возвращают форму и передают данные. При этом отправить в форму одновременно и POST запрос не получится - придётся делать второй запрос:<?php
Route::get('mouse/form', 'MouseController@form');
Route::post('mouse/form', 'MouseController@form');
?>
Чтобы не делать несколько адресов можно использовать метод match класса Route. Первым аргументом этого метода записывается массив из возможных методов передачи данных. Тогда код выше будет преобразован в:
<?php
Route::match(['get', 'post'], 'mouse/form', 'MouseController@form');
?>