2012-05-28 131 views
3

我有一個問題,當我想要使用slim微型框架在樹枝模板中獲得$_SESSION['session'];將會話傳遞給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我得到我的用戶名值。但在樹枝模板中,我無法獲得該值 – 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我的情況我使用苗條和使用twigview,我如何可以在苗條使用樹枝模板addGloball會議,這是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文件傳遞的價值爲通過關聯數組分枝。

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

我希望這會幫助你。

但是在枝條中使用「全局」是否安全?

2

這我怎麼能搭配修身框架來實現它VER3

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

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

    ... 

    return $view; 
}; 

然後在樹枝模板訪問會話像

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