О web-разработке
и даже немного больше...

Работа с HTTP-запросами в Laravel 8.x

Работа с HTTP-запросами является неотъемлемой частью практически каждого веб-фреймворка, и Laravel не исключение. В Laravel для работы с HTTP-запросами существует специальный класс Illuminate\Http\Request, который позволяет довольно гибко обрабатывать данные, выполнять различные проверки данных, в том числе и валидация полей, отправляемых с формы.

Посредством этого класса есть возможность взаимодействия с HTTP-запросами объектно-ориентированным способом. Т.е. всё что отправляется на сервер в качестве данных, можно получать через специальные методы класса Request, и выполнять различную обработку этих данных. Такими данными могут быть cookie, файлы, поля с формы, и т.д.

Данные HTTP-запроса в роутах

Объект с данными 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.

Данные HTTP-запроса в контроллере

С таким же успехом мы можем работать с классом 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

Опубликован: 15.03.2021 г.

См. также:

Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?
Как получить случайные записи из БД в Laravel?
Ограничение выборки (LIMIT) данных в Laravel
Как перенести Laravel на боевой сервер?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта