Passing Session to TWIG template

无人久伴 提交于 2019-11-30 15:48:30

You should register session as a twig global, so it becomes accessible in your templates.

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

In your template:

{{ session.username }}
Petre

I'm using Slim and Twig as well. My class:

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);
    }
}

As you can see I've added addGlobals. Now it works as it should and I can use {{session.user_id}} and so.

A part of my 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();

I hope it will help you.

But is it safe to use 'global' in Twig ?

This how I was able to achieve it with Slim Framework ver3

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

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

    ...

    return $view;
};

And then access the session in the Twig template like

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

in php file:

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

in twig file:

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

You should pass the value from your PHP file into Twig via associative array.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!