HLEB2 FAQ: Как обрабатывать запросы НЕ по HTTP? Вопрос

22 Июня (ред)

В некоторых случаях может понадобиться иметь вход в приложение не через индексный файл (изначально /public/index.php) в публичной директории и не консольную команду (файл /.console). Если веб-сервер направлен в публичную директорию, то могут возникнуть проблемы, если там находятся файлы, не используемые в HTTP-запросах. Но структура загрузки фреймворка позволяет создать новую папку в корне проекта для таких файлов и направить их обработчик в неё. Например, это может быть папка /bootstrap/ и файл app.php.

Чтобы подстроить выполнение инициализатора под выполнение запроса, нужно использовать класс Hleb\HlebQueueBootstrap или создать по аналогии. Особенностью этого класса является то, что он позволяет указать режим (стандартный, консольный, асинхронный) и команду с параметрами для выполнения. Разные режимы нужны для того, чтобы можно было выполнить команду в поддерживаемом ей режиме.

Так как таких команд может быть несколько вариантов, то вместо того, чтобы создавать под каждую инициализатор, достаточно сделать одну команду-маршрутизатор, а в неё пробрасывать условия выполнения в одном из дополнительных параметров. Абстрактный пример:

<?php
// File /bootstrap/app.php

use App\Commands\AppDistributor;
use Hleb\HlebQueueBootstrap;

include __DIR__ . "/../vendor/autoload.php";

$selectedMode = HlebQueueBootstrap::CONSOLE_MODE;
// Implies the execution of a command to rotate logs for a week.
$incomingData = ['target' => 'App\Commands\RotateLogs', 'params' => [7]];

$framework = new HlebQueueBootstrap(__DIR__, mode: $selectedMode);
$resultCode = $framework->load(AppDistributor::class, $incomingData);

При этом класс AppDistributor должен существовать и уметь обрабатывать параметры $incomingData пришедшие извне. Должен создасться объект команды с инициализацией из 'params'. В данном случае в них пример для запуска ротации логов ранее последней недели.

В упрощенном виде это может быть и так:

<?php
// File /bootstrap/app.php

use Hleb\HlebQueueBootstrap;

include __DIR__ . "/../vendor/autoload.php";

$selectedMode = HlebQueueBootstrap::CONSOLE_MODE;
// Implies the execution of a command to rotate logs for a week.
$incomingData = ['target' => 'App\Commands\RotateLogs', 'params' => [7]];

$framework = new HlebQueueBootstrap(__DIR__, mode: $selectedMode);
$resultCode = $framework->load($incomingData['target'], $incomingData['params']);

В этом случае выполняется команда без дополнительных условий, которые могли быть в AppDistributor ранее.

fomiash fomiash + 215
Опубликовано в PHP фреймворк HLEB

1 Ответ

  1. PS Возможно, что будет нужна функция Hleb\Static\System::getTaskPermissions() для того, чтобы определить заранее, может ли конкретная задача выполняться в нужном режиме.

    fomiash 24 Июня (ред.)


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.