簡體   English   中英

Symfony2,模板,“設置”中的特殊變量

[英]Symfony2, Templating, Special variables from “settings”

我在網上讀到了TWIG模板中的自定義全局變量,是的,我發現只有靜態變量。

我的問題是,我想創建一些全局變量,它們將包含來自我的Settings.php的數據(+也加入控制器來加載這些數據)。 所以它在我的:: base.html.twig中會是這樣的:

<title>{% block page_name %}settings.page_name{% endblock %}</title>

例如我的AcmeContactBundle:默認:index.html.twig如下所示:

{% extends '::base.html.twig' %}

{% block page_name %}{{ parent() }} - Contact me{% endblock %}

因此,如果我使用$settings->setPageName('My web')我的標題將具有以下形式: 我的網站 -在我的ContactBundle中 與我聯系

所以,我需要的是如何在TWIG或類似的東西中創建任何某種類型的全局變量,其中每個這個特殊變量都將包含來自任何控制器的信息,這些控制器將在my :: base.html.twig模板中解析變量$settings (就像帶有渲染模板及其變量的普通控制器一樣)。 有沒有最好的有效想法必須解決這個問題?

只需在基本模板中定義一個變量(在您的情況下為::base.html.twig ):

{% set page_name = 'AwesomeCompany - ' %}

<title>{{ page_name }}</title>

然后在擴展基本模板的模板中,您只需要覆蓋變量或向其添加內容。

{% set page_name = page_name ~ 'Home' %} 

...無需覆蓋或創建塊。


使用樹枝擴展/全局變量

為了從您的實體存儲庫中獲取值,您可以...

創建一個Twig擴展:

// src/Acme/DemoBundle/Twig/AcmeExtension.php
namespace Acme\DemoBundle\Twig;

use Doctrine\Common\Persistence\ObjectManager;

class AcmeExtension extends \Twig_Extension
{
    protected $em;

    public function __construct(ObjectManager $em)
    {
       $this->em = $em;
    }

    public function getGlobals()
    {
        return array(
            'page_name'=> $this->em->getRepository('AcmeBundle:Entity')->findOneBy(array('..'))->getPageName();
        );
    }

    public function getName()
    {
        return 'acme_extension';
    }
}

然后將您的擴展注冊為服務並注入存儲庫

# app/config/config.yml ... or load from a bundle-extension
services:
    acme.twig.acme_extension:
        class: Acme\DemoBundle\Twig\AcmeExtension
        arguments: [ "@doctrine.orm.entity_manager" ]
        tags:
            - { name: twig.extension }

現在你可以省略你的基本tempalate中的靜態{% set page_name ...因為該變量將作為全局aka提供。 在所有模板中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM