Формы в Laravel (метод POST)

В прошлой статье "Формы в Laravel (метод GET)" мы рассмотрели примеры создания формы для передачи данные методом GET. В этой статье мы усложним задачу и рассмотрим метод POST, в использовании которого есть несколько нюансов.

Возьмём пример формы из конца предыдущей статьи. Там у нас был маршрут для формы (по адресу /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');
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх