Как использовать параметры запроса в приложении Mezzio до инициализации обработчика?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как использовать параметры запроса в приложении Mezzio до инициализации обработчика?

Сообщение Anonymous »

Я создаю приложение Mezzio, которое обрабатывает некоторые POST-запросы и использует некоторые данные из тела для получения некоторых конфигураций из БД (скажем, я получаю идентификатор пользователя с помощью некоторого веб-хука, а затем получаю с его помощью нужные мне конфигурации для использования в моем приложении из определенной строки в базе данных). Все эти конфигурации необходимы для инициализации различных объектов класса для работы при обработке запроса. Обычно, если бы мне не нужны были данные из запроса, я бы сделал что-то вроде этого:

Код: Выделить всё

class WebhookHandlerFactory
{ // $config['client'] is hardcoded in the .env file in this case and then put into ConfigProvider
protected ContainerInterface $container;

public function __invoke(ContainerInterface $container): RequestHandlerInterface
{
$this->container = $container;
$config = $this->getConfig();
$client = (new SomeClient($config['client']))->getClient();
$controller = (new SomeControllerFactory)($container);

return new WebhookHandler($controller, $config, $client);
}

protected function getConfig(): ArrayObject
{
$config = $this->container->get('config');
// here I use my hardcoded data to find something in the DB and then put it into $config

return $config;
}
Проблема в том, что я не могу получить тело запроса на фабрике.
Единственный способ, который я нашел, — заставить эту фабрику возвращать другую фабрику, которая инициализируется. класс-обработчик в __construct, а затем вызывает метод handle следующим образом:

Код: Выделить всё

public function __construct(
ContainerInterface $container,
CreateController $controller,
ArrayObject $config
){
$this->container = $container;
$this->createController = $createController;
$this->config = $config;

$config = $this->getConfig();
$client = (new SomeClient($config['client']))->getClient();

$this->handler = new WebhookHandler($this->controller, $config, $client);
}

public function handle(ServerRequestInterface $request)
{
return $this->handler->handle($request);
}
Но мой файл Routes.php теперь выглядит некрасиво, и я думаю, что делаю что-то не так.

Код: Выделить всё

return static function (Application $app): void
{
$app->post('/', App\Handler\WebhookHandlerFactory::class);
Мой вопрос: какой более правильный способ получить данные моего запроса перед инициализацией обработчика и какие шаблоны лучше использовать

Подробнее здесь: https://stackoverflow.com/questions/791 ... nitialized
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»