2014-02-18 45 views
1

我正在爲我的項目使用silex框架。我正在使用具有自定義用戶實現的SecurityServiceProvider。登錄/註銷工作,我可以在symfony分析器中查看正確的用戶信息(存儲爲會話屬性)。現在我試圖將自定義用戶信息添加到樹枝環境,以便可以從模板訪問。以下是我想出來的:將自定義用戶信息添加到枝條服務提供者silex

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) { 
    $token = $app['security']->getToken(); 
    $userInfo = null; 
    if (null !== $token) { 
     $userInfo = $token->getUser()->getTwigInfo(); 
    } 
    $twig->addGlobal('userinfo', $userInfo); 
    return $twig; 
})); 

我試圖擴大環境和它的作品,但是用戶的信息似乎是後處理,我用戶信息屬性始終爲空。我想我必須以某種方式延長枝條環境,但不知道如何做到這一點。有人能幫我嗎?

回答

2

Silex使您可以直接從Twig訪問app實例。

所以,你可以這樣做:

{{ app.security.token ? app.security.token.user.twigInfo : null }} 

{% set userinfo = app.security.token ? app.security.token.user.twigInfo : null %} 

{{ userinfo }} 

如果你喜歡你的PHP代碼中處理它,那麼你可以創建一個新的定義

$app['userinfo'] = $app->share(function($app) { 
    $token = $app['security']->getToken(); 

    return (null !== $token) ? $token->getUser()->getTwigInfo() : null; 
})); 

然後在你的樹枝模板

{{ app.userinfo }} 
+1

謝謝,這工作!也已經成功地用以前的中間件來做到這一點,但猜測你的解決方案雖然比較乾淨;) – maddob

相關問題