我最近开始使用版本3中更新的Slim框架构建一个新的应用程序。
我通常在每个模板中都有一些我想要的变量(比如用户名,日期等)。在Slim v2中,我曾经通过使用钩子然后调用setData or appendData方法来执行此操作:
$app->view->setData(array(
'user' => $user
));
H3已被v3中的Middlewares取代,但是我不知道如何在全局视图中为所有模板设置数据 - 任何想法?
答案 0 :(得分:8)
这实际上是根据您使用的 view 组件,Slim 3项目提供了2个组件Twig-View和PHP-View
对于 Twig-View ,您可以使用 offsetSet ,这是一个基本的usage example,我将使用该示例,但是另外一行将 foo 变量设置到视图
中$container['view'] = function ($c) {
// while defining the view, you are passing settings as array
$view = new \Slim\Views\Twig('path/to/templates', [
'cache' => 'path/to/cache'
]);
// Instantiate and add Slim specific extension
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));
//////////////////////////////
// this is my additional line
$view->offsetSet('foo', 'bar');
//////////////////////////////
return $view;
};
只需使用
即可在Twig模板中访问{{ foo }}
对于 PHP-View ,它有不同形式的传递变量到模板,您可以在here
中找到它们// via the constructor
$templateVariables = [
"title" => "Title"
];
$phpView = new PhpRenderer("./path/to/templates", $templateVariables);
// or setter
$phpView->setAttributes($templateVariables);
// or individually
$phpView->addAttribute($key, $value);
答案 1 :(得分:5)
对于twig-view
$view->getEnvironment()->addGlobal($name, $value);