Изменить свойство Slim Request - PullRequest
0 голосов
/ 26 декабря 2018

Как я могу изменить путь URI Slim Request?Я попробовал следующее, однако, withPath() клонирует URI, таким образом, объект запроса не изменился.Если это невозможно, существует ли простой процесс создания нового Slim-запроса на основе исходного запроса, но с новым путем URI?

Исходная информация о том, почему я хочу это сделать.У меня есть метод, который принимает запрос Slim, выполняет запрос cURL на другой сервер с помощью Guzzle, пишет в Slim Response и возвращает Slim Response.API, который Guzzle запрашивает почти тот же путь, но с номером версии.

$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;
    }
}

1 Ответ

0 голосов
/ 26 декабря 2018

Если вы измените путь Uri, вы также должны изменить запрос.Это по замыслу.Не волнуйтесь, клонирование в PHP обходится дешево.

<?php

$request = $request->withUri($request->getUri()->withPath('your/changed/path'));

Примечание: будьте осторожны, используйте этот новый $request в некоторых других вызовах в стеке промежуточного программного обеспечения.Они были сделаны неизменными по причине.Изменение URI запроса в начале выполнения может иметь нежелательные побочные эффекты.

...