Bonjour,
Je suis entrain de revoir les vidéos de Grafikart sur la mise en pratique POO, et je suis bloqué avec Guzzlehttp/psr7 qui ne fonctionne pas.

J'ai en effet le code suivant pour src/Framework/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->withStatus(301);
            $response->withHeader('Location', substr($uri, 0, -1));
            return $response;
        }

        $response = new Response();
        $response->getBody()->write("Bonjour");
        return $response;
    }
}

Ce code pour web/index.php (lui il a pris public/index.php) :

<?php

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

require_once '../vendor/autoload.php';

$app = new App();

$response = $app->run(ServerRequest::fromGlobals());

Et tests/Framework/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', '/demoslash/');
        $response = $app->run($request);

        $this->assertContains('/demoslash', $response->getHeader('Location'));
        $this->assertEquals(301, $response->getStatusCode());
    }
}

J'ai donc la même chose, cependant quand je veux accéder à l'URL, il n'envoi pas les en-têtes. J'arrive bien à l'intérieur de mon if, là aucun soucis, je fais le withStatus et withHeader, mais si je var_dump ensuite la réponse, je suis toujours en code 200 et pas en 301, et Chrome me le confirme aussi dans son inspecteur, tout comme phpunit me le confirme aussi (et forcément le test échoue).

Je suis à 19 minutes de la vidéo, pour Grafikart tout fonctionne, chez moi rien ne marche. Pourtant j'avais déjà suivi la vidéo et fait les tests et ça marchait à l'époque (cela remonte à plusieurs mois). Là je voulais refaire mais en faisant d'autres tests par moment, mais là non je suis sur le code exacte et ça marche pas.

Est-ce que quelqu'un peut m'aider ? Merci d'avance pour votre aide.

P.S. : J'ai l'inspecteur de Chrome ouvert avec le cache désactivé, donc le soucis ne viens pas de là et je suis passé de Apache avec mon .htaccess qui du coup me retirait le / de fin, à un appel au serveur interne de PHP comme Grafikart, donc les conditions sont les mêmes.

EDIT à 16h22 : Bon j'ai réussi à faire fonctionner les tests unitaires, en reprenant la syntaxe de Grafikart ce qui n'avait pas marché ce matin, là ça marche enfin, problème du coup réglé.

Aucune réponse