Работа с HTTP-запросами является неотъемлемой частью практически каждого веб-фреймворка, и Laravel не исключение. В Laravel для работы с HTTP-запросами существует специальный класс Illuminate\Http\Request, который позволяет довольно гибко обрабатывать данные, выполнять различные проверки данных, в том числе и валидация полей, отправляемых с формы.
Посредством этого класса есть возможность взаимодействия с HTTP-запросами объектно-ориентированным способом. Т.е. всё что отправляется на сервер в качестве данных, можно получать через специальные методы класса Request, и выполнять различную обработку этих данных. Такими данными могут быть cookie, файлы, поля с формы, и т.д.
Объект с данными HTTP-запроса доступен практически во всём нашем приложении. К примеру, мы можем обратиться к нему из файла в роутов или контроллере. Самый простой способ — это проверить, давайте создадим простую запись обработки POST-запроса с формы.
Route::post('/contact/submit', function () { return Request::all(); })->name('contact-form');
В этом примере сразу после отправки данных с формы по адресу /contact/submit производится вывод всех полей запроса в браузер, посредством метода Request::all(). Здесь мы не подключаем контроллер намерено, чтобы убедиться в доступности класса в роутах. В результате после отправки формы в браузере мы увидим следующую запись:
{"_token":"GzIFXmjTmCg1D8TDpir75HU6ML9htEXrPyAEtdYu","person-name":null,"email":null,"message":null}
Как вы заметили, вывод данных происходит в одну строку. При разработке удобно использовать специальную функцию dd(), которая выводит данные в структурированном виде.
Route::post('/contact/submit', function () { return dd( Request::all() ); })->name('contact-form');
В результате данные уже будут в браузере выглядеть таким образом:
array:4 [▼ "_token" => "GzIFXmjTmCg1D8TDpir75HU6ML9htEXrPyAEtdYu" "person-name" => null "email" => null "message" => null ]
Обратите внимание, что значение null-имеют поля, которые были переданы пустыми. При заполнении их, он будут содержать значение поля соответственно. О назначении поля _token мы уже говорили ранее, оно используется для защиты от CSRF.
С таким же успехом мы можем работать с классом Request и в самом контроллере. Стоит отметить, что на практике основная работа с данными отправляемыми веб-фреймворку как-раз происходит в контроллере. Давайте укажем в роутах контроллер, который будет обрабатывать данные отправляемые с формы.
Route::post('/contact/submit', 'ContactController@submit')->name('contact-form');
Далее следует создать сам файл контроллера. Сделать это можно двумя путями, самый простой – сгенерировать этот файл посредством консоли artisan либо создать этот файл вручную.
Создаём контроллер в artisan
php artisan make:controller ContactController
Команду следует выполнять в терминале, с корневой директории проекта, там, где расположен сам Laravel. После выполнения команды, будет создан файл:
\app\Http\Controllers\ContactController.php
В этом файле мы создадим метод с именем submit(), который в качестве параметра будет получать объект $req. А также подключим класс Request предварительно перед обращением к нему.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; // цепляем класс Request class ContactController extends Controller { // public function submit(Request $req){ return dd( $req ); // вывод данных объекта HTTP-запроса } } ?>
Таким образом, в качестве параметра $req у метода submit() будет объект с данными HTTP-запроса. Просмотреть данные какого-либо отдельного поля в методе можно таким образом:
dd( $req->input('person-name') );
Аналогичным образом, можно работать с любыми полями, передаваемые веб-фреймворку, указывая их имена. В следующем посту мы рассмотрим возможность валидации данных, отправляемых с формы. Функционала у класса Request предостаточно, поэтому рекомендую ознакомиться более подробнее с возможностью в официальной документации:
https://laravel.com/docs/8.x/requests