【问题标题】:Passing Session to TWIG template将会话传递给 TWIG 模板
【发布时间】:2012-06-02 12:00:25
【问题描述】:

当我想使用 slim micro Framework 在 twig 模板中获取 $_SESSION['session']; 时遇到问题。

这是我的代码:

<!DOCTYPE html>
   <html>
      <head>
         <title>{{ title }} </title>
      </head>

     <body>
      <p> welcome <?php echo $_SESSION['username']; ?>                                                                                                                                       
         <p> {{ body }} </p>
       <a href="http://localhost/slim/public_html/logout">logout</a>
     </body>
  </html>

我无法使用该代码获取会话用户名。

任何建议如何将会话传递给树枝模板?

【问题讨论】:

  • 你确定$_SESSION['username'] 有值吗?
  • 是的...我的控制器页面中有 testzt 我得到了我的用户名值。但在树枝模板中我无法获得该值
  • 原来模板无法访问$_SESSION。有关解释和可能的解决方案,请参阅 Accessing session from TWIG template
  • 我以前读过,但我仍然没有解决我的问题......还有其他建议吗?我使用的是 slim 而不是 symfony :)

标签: php twig slim


【解决方案1】:

这就是我使用 Slim Framework ver3 实现它的方法

$container['view'] = function ($container) {

    ...
    $view = new Twig($settings['view']['template_path'], $settings['view']['twig']);
    $view->getEnvironment()->addGlobal('session', $_SESSION);

    ...

    return $view;
};

然后像访问Twig模板中的会话

<a href="#" class="dropdown-toggle" data-toggle="dropdown">
  <img src="#" class="img-circle">&nbsp;{{ session.username }}<b class="caret"></b>
</a>

【讨论】:

    【解决方案2】:

    我也在使用 Slim 和 Twig。我的班级:

    class twigView extends Slim_View {
        public function render( $template) {
            $loader = new Twig_Loader_Filesystem($this->getTemplatesDirectory());
            $twig = new Twig_Environment($loader);
            $twig->addGlobal("session", $_SESSION);
                    return $twig->render($template, $this->data);
        }
    }
    

    如您所见,我添加了addGlobals。现在它可以正常工作了,我可以使用{{session.user_id}} 等等。

    我的 index.php 的一部分:

        require './lib/twigView_class.php';
        require_once './lib/Twig/Autoloader.php';
        require './lib/Paris/idiorm.php';
        require './lib/Paris/paris.php';
    
        Twig_Autoloader::register();
    

    希望对你有帮助。

    但是在 Twig 中使用“全局”是否安全?

    【讨论】:

      【解决方案3】:

      在php文件中:

      $app->get('/your_route_here', function() use ($app) {
      $app->render('view_for_route.twig', array('session_username' => $_SESSION['username']) );});
      

      在树枝文件中:

      <p> welcome {{ session_username }} </p> 
      

      您应该通过关联数组将 PHP 文件中的值传递给 Twig。

      【讨论】:

        【解决方案4】:

        您应该将 session 注册为 twig global,以便在您的模板中访问它。

        //$twig is a \Twig_Environment instance
        $twig->addGlobal("session", $_SESSION);
        

        在您的模板中:

        {{ session.username }}
        

        【讨论】:

        • 我认为你是对的,但没有解决我的问题。在我的情况下,我正在使用 slim 并使用 twigview,我如何使用 twig 模板在 slim 中添加 Globall 会话,这是 slim @ 中的 twigview 库987654321@
        • 该类的 getEnvironment() 返回一个 \Twig_Environment 实例。示例代码:$twigview-&gt;getEnvironment()-&gt;addGlobal("session", $_SESSION)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多