symfony - 使 Controller 只给模板一个值,而不渲染它 - Symfony2

标签 symfony twig

我有一个带有导航栏的 Twig 模板,所有其他模板(页面)都包含此模板。我其中有一个值应该等于所有页面。如何设置这个值?

我在 Controller 中尝试这样的事情:

public function setNotificationsAction() {
    $this->setNotifications();
    return $this->render('AcmeMyBundle::navbar.html.twig', array(
        'debts' => $this->notifications,
    ));
}

然后在模板中:

<span class="badge badge-important">
    {% render(controller('AcmeMyBundle:DebtsLoansController:setNotifications')) %}
    {{ debts }}
</span>

我想要的结果是这样的:

<span class="badge badge-important">
    3
</span>

但是数字应该不同并且 Controller 应该告诉它。

我还尝试创建一个返回值的函数并按照上面的方式调用它。

我也尝试过这种语法

{{ render(controller('AcmeMyBundle:DebtsLoansController:setNotifications')) }}

但它也不起作用。

我收到以下错误:

AcmeMyBundle::navbar.html.twig 第 6 行中不存在“controller”函数

您是否知道如何实现这一目标,并且不必编辑每个 Controller 和每个模板:S 提前非常感谢!

最佳答案

好吧,我建议创建您自己的 Twig 扩展。大概是这样的:

<span class="badge">
    {{ acme_notifications() }}
</span>
namespace Acme\DemoBundle\Twig\AcmeDemoExtension

class AcmeDemoExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return array(
            'acme_notifications' => new \Twig_Function_Method($this, 'getNotifications');
        );
    }

    public function getNotifications()
    {
        $notifications = ...;

        return $notifications;
    }
}

the Symfony2 documentation 中了解有关创建您自己的 Twig 扩展的更多信息.

关于symfony - 使 Controller 只给模板一个值,而不渲染它 - Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209163/

相关文章:

html - 将自定义 css 添加到 Twig 模板,样式不适用

javascript - 当我点击外部时如何关闭菜单?

php - Symfony 2 表单错误

javascript - 如何在ajax请求中与formData一起发送附加数据

javascript - document.write javascript 函数不起作用

caching - 如何使用ESI构建Symfony2应用程序?

php - 带有查询生成器的表单生成器无法访问 Join 上的属性

php - Symfony2 与 KnpGaufrette 与 S3 与 LiipImagine

forms - Symfony2 表单中的非空白文件输入字段

forms - 有没有办法在 symfony2 中围绕输入包装标签?