Slim 3 框架 - 将数据从中间件传递到控制器 - 操作参数

C A*_*rei 3 php action middleware controller slim-3

我正在使用 slim 3 构建控制器/中间件,我希望从附加到一个组的中间件中将一些数据传递到我的控制器 - 操作中的 $args 参数。

这是一些代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)
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);
    }
}
Run Code Online (Sandbox Code Playgroud)
$app->group('/group', function () use ($app){
//routes
    })->add(new MyMiddleware());
Run Code Online (Sandbox Code Playgroud)

我的用例是将内容发送到由这些控制器的操作呈现的所有视图,因此我也可以使用其他方法来执行此操作:)

谢谢。

小智 8

所以你只需要将数据从中间件传递到控制器

关于什么

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

然后在控制器中

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