Как получить базовый url программно в Zend Expressive? - PullRequest
0 голосов
/ 04 марта 2019

Я работаю над приложением API, которое будет работать в разных доменах: http://example.com/, http://sub.example.com/, http://example -another.com / .Часть ответов API должна отправить его base_url .Поэтому я пытаюсь найти способ динамически собрать base_url и добавить его в свой ответ.

У меня есть фабрика для запуска обработчика действий следующим образом:

class TestHandlerFactory
{
    public function __invoke(ContainerInterface $container) : TestHandler
    {

        return new TestHandler();
    }
}

Тогда мой обработчик действий выглядит следующим образом:

class TestHandler implements RequestHandlerInterface
{
    public function __construct()
    {
        ...
    }
    public function handle(ServerRequestInterface $request) : ResponseInterface
    {

       ...
    }
}

Я новичок в мире Zend и нашел https://github.com/zendframework/zend-http/blob/master/src/PhpEnvironment/Request.php, вероятно, потенциальное решение моей проблемы.Однако я не знаю, как получить этот объект PHP-среды (или любой другой объект, который помогает мне получить базовый URL) в классе фабрики или обработчика.

1 Ответ

0 голосов
/ 05 марта 2019

Zend-http не используется в выразительных, это для Zend-MVC.В выразительном PSR-7 HTTP-интерфейсе сообщений используется и по умолчанию это обрабатывается в zend-diactoros .

class TestHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request) : ResponseInterface
    {
        // Get request URI
        $uri = $request->getUri();
        // Reconstruct the part you need
        $baseUrl = sprintf('%s://%s', $uri->getScheme(), $uri->getAuthority());
    }
}

Более подробную информацию можно найти здесь: https://github.com/zendframework/zend-diactoros/blob/master/src/Uri.php

РЕДАКТИРОВАТЬ: Вы не можете получить детали запроса на самой фабрике.Это может быть сделано только в Middleware или Handlers (которые являются своего рода промежуточным ПО).

...