我可以在所有树枝模板中访问特定于用户的方法吗?

时间:2013-09-16 10:21:46

标签: symfony twig

我正在使用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"

3 个答案:

答案 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)

也许你想使用“属性”枝条功能?

我想的东西:

{% if attribute(user, hasVoted) %}

希望这有帮助!

(由the doc在此指定)