如何在Slim 3.5中为Twig添加全局变量?

时间:2016-10-23 12:07:12

标签: php twig slim

在Symfony中,我习惯在任何视图中使用{{ app.user.username }}。我能在Slim做这样的事吗?

目前我正在将用户添加到$container['user']并将其传递到view->render($response, 'index.html.twig', ['user' => $this->user])的每个视图中。

换句话说,我可以将user添加为Twig的全局变量吗?我看到了许多类似的问题,但没有找到我能够使用的解决方案。

3 个答案:

答案 0 :(得分:5)

$container['view']->addGlobal('user', $this->user);怎么样?

答案 1 :(得分:1)

我用它来公开 {{current_path}} 变量中的路径:

$container = $app->getContainer();
$container["view"] = function ($container) use ($menu) {
    $view = new \Slim\Views\Twig("../templates");
    $basePath = rtrim(str_ireplace("index.php", "", $container["request"]->getUri()->getBasePath()), "/");
    $view->addExtension(new Slim\Views\TwigExtension($container["router"], $basePath));
    $view->getEnvironment()->addGlobal("current_path", $container["request"]->getUri()->getPath());
    return $view;
};

这遵循Templates文档中描述的方法。

答案 2 :(得分:0)

我通过将此行添加到我的依赖项(在我注册Twig之后)

来实现此功能
$container['view']['user'] = $_SESSION['user'];

这很有效。我可以使用{{ user.username }}获取用户名。我不知道以这种方式进行会话是多么安全,但它确实有效。