2012-05-28 4 views
3

У меня проблема, когда я хочу получить $_SESSION['session']; в шаблоне ветви с использованием тонкой микро Framework.Передача сессии на шаблон TWIG

это мой код:

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

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

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

+0

Вы уверены, что '$ _SESSION ['username'] 'имеет значение? – flowfree

+0

да ... у меня есть teszt на моей странице контроллера. Я получаю свое имя пользователя. но в шаблоне twig я не могу получить это значение – viyancs

+0

Оказывается, что '$ _SESSION' недоступен из шаблона. См. [Доступ к сеансу из шаблона TWIG] (http://stackoverflow.com/q/8399389/1396314) для объяснения и возможных решений. – flowfree

ответ

10

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

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

В шаблоне:

{{ session.username }} 
+0

Я думаю, что вы правы, но не решили мою проблему .. ini my case Я использую slim и использую twigview, как я могу добавить сессию Globall в slim с помощью шаблона twig, это библиотека для twigview в slim https://github.com/codeguy/Slim-Extras/blob/master/Views/TwigView.php – viyancs

+1

'getEnvironment()' этого класса возвращает экземпляр '\ Twig_Environment'. Пример кода: '$ twigview-> getEnvironment() -> addGlobal (" session ", $ _SESSION)' – Maerlyn

2

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

3

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

2

Это, как я был в состоянии достигнуть его Слим 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>