为什么标题是空的?

问题描述 投票:0回答:1

我正在尝试获得一个简单的重定向来与 GuzzleHttp 一起使用,并使用 phpunit 来测试我的代码。预期的行为是,如果请求的 URL 以“/”结尾,则响应应该重定向到去掉尾随“/”的同一 URL。

这就是我的

App.php
的样子 :

<?php
namespace Framework;
use GuzzleHttp\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class App {
    public function run(ServerRequestInterface $request): ResponseInterface {
        $uri= $request->getUri()->getPath();
        if (!empty($uri) && $uri[-1] === "/") {
            $response= new Response();
            $response= $response->withStatus(301);
            $response= $response->withHeader('Location', substr($uri, 0, -1));
        }
        $response= new Response();
        $response->getBody()->write('Hello.');
        return $response;
    }
}

我在

AppTest.php
中运行测试,如下所示:

<?php
namespace Tests\Framework;

use Framework\App;
use GuzzleHttp\Psr7\ServerRequest;
use PHPUnit\Framework\TestCase;

class AppTest extends TestCase {
    public function testRedirectTrailingSlash() {
        $app= new App();
        $request= new ServerRequest('GET', '/some-slug/');
        $response= $app->run($request);
        $this->assertContains('/some-slug', $response->getHeader('Location'));
        $this->assertEquals('301', $response->getStatusCode());
    }
}

当我运行此测试时,两个断言都失败,这是由于响应的状态代码为

200
并且标头列表为空,我通过执行
var_dump()
确认了这一点。

最奇怪的是,我几个月前写了这段代码,它起作用了,据我记得,从那时到现在我所做的唯一一件事就是

composer install
,所以我不知道这是否是由于依赖项的最新更新。

有人可以帮我吗?

php http-headers guzzle
1个回答
0
投票

但是在安装 Composer 之前如何运行此代码?

© www.soinside.com 2019 - 2024. All rights reserved.