php - 如何在zend expressive中以编程方式获取基本url?
问题描述
我正在开发一个将在不同域中运行的 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 的对象)。
解决方案
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
编辑:您无法在工厂本身中获取请求详细信息。这只能在中间件或处理程序(它们是一种中间件)中完成。
推荐阅读
- loops - 在 Tableau 中标记所有行相关的行
- javascript - 为什么 var prezzo 不刷新值?
- function - Powershell 函数字符串输出作为基于文件的函数的输入
- javascript - 扩展错误。未选中 runtime.lastError: 无法建立连接。接收端不存在
- docker - Docker 桌面教程失败 - 参考格式无效
- cmd - 如何在 cmd.exe 中读取管道?
- mongodb - 您如何从从驱动器访问和使用先前的 MongoDB 数据库?
- python - 如何在 pandas 中将行数据转换为列数据,同时重复和移动日期?
- java - 如何在锁定屏幕上显示音乐播放器控件
- gradle - 使用 ML Gradle 创建 Marklogic 森林