📥 HTTP-запросы
Класс Request в PageBlocks предоставляет простой и мощный способ работы с входящими HTTP-запросами. Он оборачивает суперглобальные переменные ($_GET, $_POST, $_FILES, $_SERVER и т.д.) и предоставляет чистый API для получения данных, заголовков, файлов, проверки типа запроса и валидации.
Вы можете получить экземпляр запроса двумя способами:
🧩 Через глобальный хелпер
request() // Вернёт экземпляр Request
request('email') // Сразу вернёт значение по ключуХелпер request() — это краткий способ получить текущий HTTP-запрос или значение одного из параметров.
⚙️ Через внедрение в замыкание
use Boshnik\PageBlocks\Http\Request;
Route::get('/', function (Request $request) {
$email = $request->email;
});Класс Request автоматически внедряется в замыкание маршрута или контроллер, если указан в параметрах.
📍 Путь и URL
path() — путь запроса без домена
request()->path(); // '/catalog/items'url() — текущий URL (без параметров)
request()->url(); // 'https://example.com/catalog/items'fullUrl() — полный URL запроса
request()->fullUrl(); // 'https://example.com/catalog/items?sort=price'rootUrl() — базовый адрес сайта
request()->rootUrl(); // 'https://example.com'isSecure() — защищён ли запрос (HTTPS)
request()->isSecure(); // true или false📡 Метод запроса
method() — возвращает HTTP-метод (GET, POST, PUT...)
if (request()->method() === 'POST') {
// обработка формы
}isMethod() — проверяет тип запроса
if (request()->isMethod('post')) {
//...
}🧾 Заголовки
header($key) — получить заголовок
request()->header('Accept'); // 'text/html,application/xhtml+xml,...'hasHeader($key) — проверить наличие заголовка
request()->hasHeader('Authorization');🌐 IP-адрес клиента
request()->ip(); // например: '192.168.1.10'🔍 Проверка типа запроса
ajax() — это AJAX-запрос?
if (request()->ajax()) {
return json(['ok' => true]);
}isJson() — содержит ли запрос JSON?
request()->isJson(); // true, если JSON в Content-Type или AcceptexpectsJson() — клиент ожидает ответ в JSON?
request()->expectsJson(); // true для APIaccepts(array $types) — поддерживает ли клиент нужный тип?
request()->accepts(['application/json', 'text/html']);📥 Получение данных
input($key) — получить любое входное значение (GET, POST, JSON, FILES)
request()->input('email');
request('email');get($key, $default) — то же самое
request()->get('email', 'no@email.com');has($key) — есть ли значение?
if (request()->has('token')) {
// ...
}💾 Все данные запроса
request()->all(); // возвращает массив из query + post + json + files✉️ Получение GET и POST
request()->query('id'); // $_GET['id']
request()->post('name'); // $_POST['name']🧪 Получение JSON-данных
Если запрос содержит Content-Type: application/json, можно получить:
request()->json('title'); // одно значение
request()->json(); // весь JSONПример:
{
"title": "Hello world",
"tags": ["php", "modx"]
}📁 Работа с файлами
hasFile($key) — был ли загружен файл
if (request()->hasFile('avatar')) {
// ...
}file($key) — получить загруженный файл
$file = request()->file('avatar');
$file->moveTo('uploads/'); // пример: метод UploadedFilefiles() — получить все файлы
$all = request()->files(); // массив файлов🧪 Валидация данных
$data = request()->validate([
'email' => 'required|email',
'password' => 'required|min:6',
]);Если данные не прошли проверку — выбрасывается исключение, которое можно перехватить и вернуть ошибку клиенту.
🔮 Магические свойства
Вы можете обращаться к данным напрямую как к свойствам:
$name = request()->name;
request()->city = 'Kyiv';🧰 Пример полной обработки запроса
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() | Валидация входных данных |