我正在使用Symfony2和FOSUserBundle。我创建了一个方法,我询问用户是否已完成特定操作,例如$user->hasVoted()
。
在我的树枝模板中,我希望能够提问
{% if user.hasVoted() %}
每个模板中的(因为它隐含了要包含的其他部分内容),但我不想将整个$user
对象传递给每个模板。
有没有办法让所有模板都可以访问这个用户方法(或者我也可以将布尔值传递给所有模板),而不必将它显式传递给每个模板?
我知道injecting variables into all templates from the Symfony cookbook。
# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x
但是食谱条目要么告诉如何注入静态值(如上例所示),要么注入服务。
是否有一种简单的方法可以包含这个布尔值而无需定义服务并像这样注入:
# app/config/config.yml
twig:
# ...
globals:
user_has_voted: "@acme_user.user_has_voted"
答案 0 :(得分:4)
经过身份验证的用户可以通过app.user
随处获得。
{% if app.user.hasVoted() %}
或者更简洁,您可以创建twig extension is_granted
。这使您可以在不更改模板的情况下更改将来的逻辑。
答案 1 :(得分:3)
是的,你可以在你的bundle boot()方法中使用:
// src/Acme/DemoBundle/AcmeDemoBundle.php
public function boot()
{
$hasVoted = $this->container->get('security.context')->getToken()->getUser()->hasVoted();
$this->container->get('twig')->addGlobal('user_has_voted', $hasVoted);
}
答案 2 :(得分:0)