我正在为我的项目使用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。我想我必须以某种方式延长枝条环境,但不知道该怎么做。有人能帮助我吗?
答案 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 }}