将自定义用户信息添加到twig服务提供者silex

时间:2014-02-18 13:45:49

标签: twig silex

我正在为我的项目使用silex框架。我正在使用SecurityServiceProvider和自定义用户实现。登录/注销工作,我能够在symfony探查器中查看正确的用户信息(存储为会话属性)。现在我尝试将自定义用户信息添加到树枝环境中,以便可以从模板访问。以下是我的想法:

$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;
}));

我正在尝试扩展环境并且它可以工作,但是用户信息似乎稍后会处理,而我的 userinfo 属性始终为null。我想我必须以某种方式延长枝条环境,但不知道该怎么做。有人能帮助我吗?

1 个答案:

答案 0 :(得分: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;
}));

然后在你的Twig模板中

{{ app.userinfo }}