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)