Php Symfony2,模板,特殊变量来自;“设置”;

Php Symfony2,模板,特殊变量来自;“设置”;,php,symfony,twig,Php,Symfony,Twig,我在网上读到关于TWIG模板中的自定义全局变量,是的,我发现只有静态变量 我的问题是,我想创建几个全局变量,这些变量将包含来自My Settings.php的数据(+还可以加入控制器以加载此数据)。因此,它将在我的::base.html.twig中显示如下: <title>{% block page_name %}settings.page_name{% endblock %}</title> 因此,如果我使用$settings->setPageName(“我的网站”)

我在网上读到关于TWIG模板中的自定义全局变量,是的,我发现只有静态变量

我的问题是,我想创建几个全局变量,这些变量将包含来自My Settings.php的数据(+还可以加入控制器以加载此数据)。因此,它将在我的::base.html.twig中显示如下:

<title>{% block page_name %}settings.page_name{% endblock %}</title>
因此,如果我使用
$settings->setPageName(“我的网站”)
我的标题将具有以下形式:我的网站-在我的联系人包中与我联系


所以,我需要的是如何在TWIG或类似的东西中创建任何类型的全局变量,其中每个特殊变量都有来自任何控制器的信息,这些控制器将在我的模板中解析变量
$settings
::base.html.TWIG
(就像带有渲染模板及其变量的普通控制器一样)。有什么最有效的方法来解决这个问题吗?

只需在基本模板中定义一个变量(
::base.html.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 }

现在您可以编辑静态
{%set page\u name…
在您的基本模板中,因为变量将作为全局aka提供。在所有模板中。

我认为您可能需要将问题分解,以便更清楚地了解您要求的步骤。但是您可以看到'AwesomeCompany-'是一个静态值。我需要从DB(通过对象设置)获取此数据然后使用
getGlobals()
方法创建一个注册全局变量的细枝扩展。有没有示例如何将其用于实体?好了-还有什么问题吗?或者它是否足以用于向上投票/接受?:)
{% set page_name = page_name ~ 'Home' %} 
// 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 }