[英]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.