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->store('uploads/'); // UploadedFile::store($directory, $filename)

Для поля с множественной загрузкой file() вернёт массив объектов UploadedFile.

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

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

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

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

Если данные не прошли проверку, исключение не бросается и ничего не возвращается: ответ с ошибкой отправляется, и запрос на этом заканчивается (JSON со статусом 422 для AJAX, иначе редирект назад с {$errors} и {$old_input}). Перехватывать нечего — код после validate() выполняется только на валидных данных. См. Валидацию.

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

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

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(), allFiles()Работа с файлами
validate()Валидация входных данных

© PageBlocks 2019-present