Передача сеанса в шаблон 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>

я не могу получить имя пользователя сеанса с этим кодом.

Любое предложение, как передать сессию в шаблон веточку?

4 ответа

Решение

Вы должны зарегистрировать сессию как глобальную веточку, чтобы она стала доступной в ваших шаблонах.

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

В вашем шаблоне:

{{ session.username }}

Я использую 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?

Вот как я смог добиться этого с 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>

В 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 через ассоциативный массив.

Другие вопросы по тегам