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