Search code examples
phpcontrolleractionmiddlewareslim-3

Slim 3 framework - Passing data from middleware to controller - action args


I'm using a controller/middleware build with slim 3 and i want from the middleware attached to a group, to pass some data to the $args parameter in my controller - action.

Here's some code:

class MyController
{
    protected $container;

    public function __construct(ContainerInterface $container) {
        $this->container = $container;
    }

    public function index(Request $request, Response $response, $args) {
        return $this->container->get('renderer')->render($response, "index.html.twig", $args);
    }
}
class MyMiddleware
{
    public function __invoke(Request $request, Response $response, $next)
    {
// do some stuff to inject further down to $args some data
        return $next($request, $response);
    }
}
$app->group('/group', function () use ($app){
//routes
    })->add(new MyMiddleware());

My use case is to send stuff to all the views rendered by the actions of these controllers, so i'm also fine with other ways to do this :)

Thanks.


Solution

  • so you need just pass data from Middleware to Controller

    what about

    class MyMiddleware
    {
        public function __invoke(Request $request, Response $response, $next)
        {
            $request = $request->withAttribute('myMagicArgument', 42);
            return $next($request, $response);
        }
    }
    

    and then in controller

    class MyController
    {
        //...
        public function index(Request $request, Response $response) {
            $yourAttributeFromMiddleware = $request->getAttribute('myMagicArgument');
            //...
        }
    }