Skip to content

📥 HTTP-запросы

Класс Request в PageBlocks предоставляет простой и мощный способ работы с входящими HTTP-запросами. Он оборачивает суперглобальные переменные ($_GET, $_POST, $_FILES, $_SERVER и т.д.) и предоставляет чистый API для получения данных, заголовков, файлов, проверки типа запроса и валидации.

Вы можете получить экземпляр запроса двумя способами:

🧩 Через глобальный хелпер

php
request()               // Вернёт экземпляр Request
request('email')        // Сразу вернёт значение по ключу

Хелпер request() — это краткий способ получить текущий HTTP-запрос или значение одного из параметров.

⚙️ Через внедрение в замыкание

php
use Boshnik\PageBlocks\Http\Request;

Route::get('/', function (Request $request) {
    $email = $request->email;
});

Класс Request автоматически внедряется в замыкание маршрута или контроллер, если указан в параметрах.

📍 Путь и URL

path() — путь запроса без домена

php
request()->path(); // '/catalog/items'

url() — текущий URL (без параметров)

php
request()->url(); // 'https://example.com/catalog/items'

fullUrl() — полный URL запроса

php
request()->fullUrl(); // 'https://example.com/catalog/items?sort=price'

rootUrl() — базовый адрес сайта

php
request()->rootUrl(); // 'https://example.com'

isSecure() — защищён ли запрос (HTTPS)

php
request()->isSecure(); // true или false

📡 Метод запроса

method() — возвращает HTTP-метод (GET, POST, PUT...)

php
if (request()->method() === 'POST') {
    // обработка формы
}

isMethod() — проверяет тип запроса

php
if (request()->isMethod('post')) {
    //...
}

🧾 Заголовки

header($key) — получить заголовок

php
request()->header('Accept'); // 'text/html,application/xhtml+xml,...'

hasHeader($key) — проверить наличие заголовка

php
request()->hasHeader('Authorization');

🌐 IP-адрес клиента

php
request()->ip(); // например: '192.168.1.10'

🔍 Проверка типа запроса

ajax() — это AJAX-запрос?

php
if (request()->ajax()) {
    return json(['ok' => true]);
}

isJson() — содержит ли запрос JSON?

php
request()->isJson(); // true, если JSON в Content-Type или Accept

expectsJson() — клиент ожидает ответ в JSON?

php
request()->expectsJson(); // true для API

accepts(array $types) — поддерживает ли клиент нужный тип?

php
request()->accepts(['application/json', 'text/html']);

📥 Получение данных

input($key) — получить любое входное значение (GET, POST, JSON, FILES)

php
request()->input('email');
request('email');

get($key, $default) — то же самое

php
request()->get('email', 'no@email.com');

has($key) — есть ли значение?

php
if (request()->has('token')) {
    // ...
}

💾 Все данные запроса

php
request()->all(); // возвращает массив из query + post + json + files

✉️ Получение GET и POST

php
request()->query('id');     // $_GET['id']
request()->post('name');    // $_POST['name']

🧪 Получение JSON-данных

Если запрос содержит Content-Type: application/json, можно получить:

php
request()->json('title');  // одно значение
request()->json();         // весь JSON

Пример:

json
{
  "title": "Hello world",
  "tags": ["php", "modx"]
}

📁 Работа с файлами

hasFile($key) — был ли загружен файл

php
if (request()->hasFile('avatar')) {
    // ...
}

file($key) — получить загруженный файл

php
$file = request()->file('avatar');
$file->moveTo('uploads/'); // пример: метод UploadedFile

files() — получить все файлы

php
$all = request()->files(); // массив файлов

🧪 Валидация данных

php
$data = request()->validate([
    'email' => 'required|email',
    'password' => 'required|min:6',
]);

Если данные не прошли проверку — выбрасывается исключение, которое можно перехватить и вернуть ошибку клиенту.

🔮 Магические свойства

Вы можете обращаться к данным напрямую как к свойствам:

php
$name = request()->name;

request()->city = 'Kyiv';

🧰 Пример полной обработки запроса

php
public function store(Request $request)
{
    // Валидация данных формы
    $validated = $request->validate([
        'honeypot'   => 'empty',
        'pagetitle'  => 'required|unique:modResource',
        'alias'      => 'nullable|string',
        'template'   => 'required|numeric|exists:modTemplate,id',
        'content'    => 'nullable|string',
    ]);

    // Объединяем с дефолтными значениями MODX-ресурса
    $data = array_merge([
        'class_key'     => 'modDocument',
        'context_key'   => 'web',
        'content_type'  => 1,
        'published'     => 1,
        'publishedon'   => '',
        'publishedby'   => $this->modx->user->id ?? 1,
        'deleted'       => 0,
    ], $validated);

    // Сохраняем ресурс
    $status = query(\modResource::class)->create($data);

    return $status
        ? response()->success('Ресурс успешно создан')
        : response()->error('Ошибка при создании ресурса');
}

📌 Резюме

МетодОписание
request() или $request в контроллереПолучить экземпляр запроса
input(), get()Получить значение по ключу
all()Все данные запроса
method(), isMethod()Метод запроса
header(), hasHeader()Заголовки
ip()IP клиента
ajax(), isJson(), expectsJson()Тип запроса
json()JSON-тело запроса
file(), hasFile(), files()Работа с файлами
validate()Валидация входных данных

© PageBlocks 2019-present