viyancs
viyancs

Reputation: 2339

Passing Session to TWIG template

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

this is my code :

<!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>

i can't get session username with that code.

any suggestion how to passing session to twig template?

Upvotes: 3

Views: 9691

Answers (4)

bmatovu
bmatovu

Reputation: 4074

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>

Upvotes: 3

Petre
Petre

Reputation: 108

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 ?

Upvotes: 3

zeratool
zeratool

Reputation: 1281

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.

Upvotes: 2

Maerlyn
Maerlyn

Reputation: 34107

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

Upvotes: 11

Related Questions