Search code examples
phproutesslimmiddleware

Route pattern in middleware Slim v3


How can I get route pattern inside middleware:

routes.php:

$app->get('/myroute/{id}', function($req, $res, $args) {
//DO STUFF HERE
})->add(new MyMiddle());

middle.php:

class MyMiddle {
    public function __invoke($req, $res, $next) {
         //DO STUFF
    }
}

In routes.php I can get {id} with $args['id'], but how can I get it inside MyMiddle.php?

Thank you,
Cristian Molina


Solution

    1. Enable the determineRouteBeforeAppMiddleware setting:

      $config = ['settings' => [
          'determineRouteBeforeAppMiddleware' => true,
          'displayErrorDetails' => true,
      ]];
      $app = new \Slim\App($config);
      
    2. You can now access the Route object from the Request, using getAttribute() and, from the route, get at the arguments:

      $app->add(function ($request, $response, $next) {
          $id = $request->getAttribute('route')->getArgument('id');
          return $next($request, $response);
      });