我正在研究一个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-Environment对象(或任何其他可帮助我获取基本URL的对象)。
答案 0 :(得分:1)
zend-http不用于表达,它用于zend-mvc。在具有表现力的PSR-7 HTTP message interfaces中使用,默认情况下,此问题在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
编辑:您不能在工厂本身中获取请求详细信息。这只能在中间件或处理程序(属于中间件)中完成。