1

我正在使用带有 FOSUserBundle 的 Symfony2。我创建了一个方法,询问用户是否执行了特定操作,例如$user->hasVoted().

在我的树枝模板中,我希望能够询问

{% if user.hasVoted() %}

每个模板中(因为它暗示要包含哪些其他部分),但我不想将整个$user对象传递给每个模板。

有没有办法让这个用户方法在所有模板中都可以访问(或者我也可以将布尔值传递给所有模板)而不必显式地将它传递给每个模板?

我知道将变量注入 Symfony 食谱中的所有模板

# 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"
4

3 回答 3

4

经过身份验证的用户可以通过app.user任何地方获得。

{% if app.user.hasVoted() %}

或者更简洁的方式,您创建一个is_granted. 这使您能够在将来更改背后的逻辑,而无需更改模板。

于 2013-09-16T10:31:43.733 回答
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);
}
于 2013-09-16T10:34:01.670 回答
0

也许您想使用“属性”树枝功能?

我猜是这样的:

{% if attribute(user, hasVoted) %}

希望这可以帮助!

(正如文档在此处指定的那样)

于 2013-09-16T10:26:46.173 回答