如何更改 Slim 请求的 URI 路径?但是,我尝试了以下操作,withPath()
克隆了 uri,因此请求对象没有更改。如果不可能,是否有基于原始请求但新的 URI 路径创建新 Slim 请求的简单过程?
关于我为什么要这样做的背景。我有一个接受 Slim 请求的方法,使用 Guzzle 向另一台服务器执行 cURL 请求,写入 Slim 响应,并返回 Slim 响应。Guzzle 查询几乎相同路径但带有版本号的 API。
$app->get('/{basetype:guids|tester}/{guid}/logs/{id:[0-9]+}', function (Request $request, Response $response, $args) {
switch($request->getQueryParam('ContentType')) {
case 'text':
//
return $this->view->render($response, 'log.html', $rs);
case 'file':
$uri=$request->getUri();
$path=$uri->getPath();
$uri->withPath(_VER_.$path);
return $this->serverBridge->proxy($request, $response, 'application/octet-stream');
}
});
class ServerBridge
{
protected $httpClient;
public function __construct(\GuzzleHttp\Client $httpClient)
{
$this->httpClient=$httpClient;
}
public function proxy(\Slim\Http\Request $slimRequest, \Slim\Http\Response $slimResponse):\Slim\Http\Response {
//$slimRequest is used to obtain data to send to Guzzle
$curlResponse = $this->httpClient->request($method, $path, $options);
//use $curlResponse to get data and write to $slimResponse
return $slimResponse;
}
}