php - Slim 4 从中间件分配树枝参数
问题描述
我正在尝试将我的网站代码从 Slim v2 升级到 v4。我不是铁杆程序员,所以我面临问题。在 Slim v2 中,我有一些中间件,可以在执行路由代码之前将参数分配给 Twig 视图。现在我正在尝试使用 Slim v4 进行相同的管理,但没有成功。
我有一个容器:
$container = new \DI\Container();
我有这样的看法:
$container->set('view', function(\Psr\Container\ContainerInterface $container) {
return Twig::create(__DIR__ . '/views');
});
我尝试从中间件使用它:
$this->get('view')->offsetSet('fbloginurl', $loginUrl);
但是当视图呈现时没有附加任何内容。
如果我尝试从内部路线使用相同的,它的工作正常。
示例路线:
$app->get('/', function ($request, $response, $args) {
$params = array(...);
return $this->get('view')->render($response, 'index.html', $params);
});
解决方案
有两种可能的故障。首先,DI 容器可能总是返回一个新实例,因此它不会将变量存储在正确的实例中,并且它们不会在 twig 模板中呈现。其次,您在路线示例中使用了不同的方法。您通过变量传递$params
变量,并通过这种方式将它们提供给模板。
因此,您可以将变量存储$this->get('view')
在变量中或将变量作为$params
.
编辑:您还可以检查 DI\Container 中的变量是否已经存在,然后返回实例。
推荐阅读
- java - 使用 JSTL 时出现 JasperException
- laravel - 无法从 Homestead 上的 Laravel 6 连接到邮件服务器
- python - _tkinter.TclError:无效的命令名称“.!entry”
- sql - 将列添加到 SQL 表并使用该列的一组固定值分解行
- javascript - 使用包装反应应用程序的优点是什么
与直接使用 javascript 进行突变和查询相比 - c++ - 在构造函数中初始化参数的构造
- reactjs - React Redux 错误:redux.js:275 未捕获错误:操作必须是普通对象。相反,实际的类型是:'Promise'
- javascript - JavaScript:是否可以创建一个数组,每个数组元素都有多个值?
- java - 获取负载 JWT
- ios - 在 ContentView.swift 中编写时不允许在顶层使用表达式