当我尝试为Slim中的所有路由注册csrf中间件时,为什么我的依赖关系容器变量未定义?

时间:2019-07-27 22:54:08

标签: slim middleware

我正在尝试为所有路由注册中间件,以防止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未定义后刷新页面时,该设置确实有效。因为我对使用框架完全陌生,所以我真的可以使用一些见解。谢谢。

1 个答案:

答案 0 :(得分:1)

App不是容器本身;它容纳了容器,因此您需要先获取它。

尝试:

return function (App $app) {
    $app->add($app->getContainer()->get('csrf'));
};

请注意,我还使用了容器上的get()方法进行检索。这是PSR-11使用的方法,因此可用于各种容器。使用数组访问从容器中检索项目是Pimple特定的。