Просмотр файла app/Middleware/TrailingSlashMiddleware.php

Размер файла: 1.12Kb
  1. <?php
  2.  
  3. namespace App\Middleware;
  4.  
  5. use Psr\Http\Message\ResponseInterface as Response;
  6. use Psr\Http\Message\ServerRequestInterface as Request;
  7. use Psr\Http\Server\MiddlewareInterface as Middleware;
  8. use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
  9. use Slim\Psr7\Response as PsrResponse;
  10.  
  11. final class TrailingSlashMiddleware implements Middleware
  12. {
  13. public function process(
  14. Request $request,
  15. RequestHandler $handler
  16. ): Response {
  17. $uri = $request->getUri();
  18. $path = $uri->getPath();
  19.  
  20. if ($path !== '/' && str_ends_with($path, '/')) {
  21. $path = rtrim($path, '/');
  22.  
  23. // permanently redirect paths with a trailing slash
  24. // to their non-trailing counterpart
  25. $uri = $uri->withPath($path);
  26.  
  27. if ($request->getMethod() === 'GET') {
  28. $response = new PsrResponse();
  29. return $response
  30. ->withHeader('Location', (string) $uri)
  31. ->withStatus(301);
  32. }
  33.  
  34. $request = $request->withUri($uri);
  35. }
  36.  
  37. return $handler->handle($request);
  38. }
  39. }