Passing Session to TWIG template

前端 未结 4 2000
春和景丽
春和景丽 2021-01-03 09:06

i have a problem when i want to get $_SESSION[\'session\']; in twig template using slim micro Framework.

this is my code :



        
相关标签:
4条回答
  • 2021-01-03 09:34

    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 ?

    0 讨论(0)
  • 2021-01-03 09:46

    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.

    0 讨论(0)
  • 2021-01-03 09:48

    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 }}
    
    0 讨论(0)
  • 2021-01-03 09:53

    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>

    0 讨论(0)
提交回复
热议问题