【问题标题】:How can I add global variables for Twig in Slim 3.5?如何在 Slim 3.5 中为 Twig 添加全局变量?
【发布时间】:2017-03-05 07:17:45
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为你应该添加接收当前用户而不是用户对象的类。用户数据可以在请求期间更改。

标签: php twig slim


【解决方案1】:

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

【讨论】:

  • 这是要走的路
  • 如果不使用symfony,可能需要使用$container['view']->getEnvironment()->addGlobal('base', 'xxx');
【解决方案2】:

我用它来暴露 {{ 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 文档中描述的方法。

【讨论】:

    【解决方案3】:

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

    $container['view']['user'] = $_SESSION['user'];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      相关资源
      最近更新 更多