Skip to content

Commit

Permalink
Merge pull request #2889 from adriansuter/patch-route-reserved-keywords
Browse files Browse the repository at this point in the history
Change route context attribute names
  • Loading branch information
l0gicgate authored Nov 29, 2019
2 parents 4360365 + 2c6d2be commit ea75cf4
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 64 deletions.
7 changes: 4 additions & 3 deletions Slim/Middleware/RoutingMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use Slim\Exception\HttpNotFoundException;
use Slim\Interfaces\RouteParserInterface;
use Slim\Interfaces\RouteResolverInterface;
use Slim\Routing\RouteContext;
use Slim\Routing\RoutingResults;

class RoutingMiddleware implements MiddlewareInterface
Expand Down Expand Up @@ -53,7 +54,7 @@ public function __construct(RouteResolverInterface $routeResolver, RouteParserIn
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$request = $request->withAttribute('routeParser', $this->routeParser);
$request = $request->withAttribute(RouteContext::ROUTE_PARSER, $this->routeParser);
$request = $this->performRouting($request);
return $handler->handle($request);
}
Expand All @@ -76,7 +77,7 @@ public function performRouting(ServerRequestInterface $request): ServerRequestIn
);
$routeStatus = $routingResults->getRouteStatus();

$request = $request->withAttribute('routingResults', $routingResults);
$request = $request->withAttribute(RouteContext::ROUTING_RESULTS, $routingResults);

switch ($routeStatus) {
case RoutingResults::FOUND:
Expand All @@ -85,7 +86,7 @@ public function performRouting(ServerRequestInterface $request): ServerRequestIn
$route = $this->routeResolver
->resolveRoute($routeIdentifier)
->prepare($routeArguments);
return $request->withAttribute('route', $route);
return $request->withAttribute(RouteContext::ROUTE, $route);

case RoutingResults::NOT_FOUND:
throw new HttpNotFoundException($request);
Expand Down
16 changes: 12 additions & 4 deletions Slim/Routing/RouteContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,24 @@

final class RouteContext
{
public const ROUTE = '__route__';

public const ROUTE_PARSER = '__routeParser__';

public const ROUTING_RESULTS = '__routingResults__';

public const BASE_PATH = '__basePath__';

/**
* @param ServerRequestInterface $serverRequest
* @return RouteContext
*/
public static function fromRequest(ServerRequestInterface $serverRequest): self
{
$route = $serverRequest->getAttribute('route');
$routeParser = $serverRequest->getAttribute('routeParser');
$routingResults = $serverRequest->getAttribute('routingResults');
$basePath = $serverRequest->getAttribute('basePath');
$route = $serverRequest->getAttribute(self::ROUTE);
$routeParser = $serverRequest->getAttribute(self::ROUTE_PARSER);
$routingResults = $serverRequest->getAttribute(self::ROUTING_RESULTS);
$basePath = $serverRequest->getAttribute(self::BASE_PATH);

if ($routeParser === null || $routingResults === null) {
throw new RuntimeException('Cannot create RouteContext before routing has been completed');
Expand Down
9 changes: 6 additions & 3 deletions Slim/Routing/RouteRunner.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,20 @@ public function __construct(
public function handle(ServerRequestInterface $request): ResponseInterface
{
// If routing hasn't been done, then do it now so we can dispatch
if ($request->getAttribute('routingResults') === null) {
if ($request->getAttribute(RouteContext::ROUTING_RESULTS) === null) {
$routingMiddleware = new RoutingMiddleware($this->routeResolver, $this->routeParser);
$request = $routingMiddleware->performRouting($request);
}

if ($this->routeCollectorProxy !== null) {
$request = $request->withAttribute('basePath', $this->routeCollectorProxy->getBasePath());
$request = $request->withAttribute(
RouteContext::BASE_PATH,
$this->routeCollectorProxy->getBasePath()
);
}

/** @var Route $route */
$route = $request->getAttribute('route');
$route = $request->getAttribute(RouteContext::ROUTE);
return $route->run($request);
}
}
Loading

0 comments on commit ea75cf4

Please # to comment.