我正在尝试为所有路由注册中间件,以防止Slim中的csrf。我已经使用composer安装了用于Slim csrf保护的文件,并且已将依赖项添加到我的依赖项文件中,但是当我尝试在中间件文件中注册中间件时,出现错误消息,告诉我我的依赖项容器变量未定义。 / p>
我是编程新手,不了解如何解决框架中的问题。所以我只是尝试摆弄它。
Dependencies.php中的依赖项:
$container['csrf'] = function ($c) {
return new \Slim\Csrf\Guard;
};
在middleware.php中注册中间件:
use Slim\App;
return function (App $app) {
$app->add($container['csrf']);
};
它应该工作,特别是考虑到我确实按照文档中的说明进行了设置,但是在收到通知消息告诉我$ container未定义后刷新页面时,该设置确实有效。因为我对使用框架完全陌生,所以我真的可以使用一些见解。谢谢。
答案 0 :(得分:1)
App
不是容器本身;它容纳了容器,因此您需要先获取它。
尝试:
return function (App $app) {
$app->add($app->getContainer()->get('csrf'));
};
请注意,我还使用了容器上的get()
方法进行检索。这是PSR-11使用的方法,因此可用于各种容器。使用数组访问从容器中检索项目是Pimple特定的。