gpt4 book ai didi

php - 来自基本 Controller symfony2 的全局变量

转载 作者:可可西里 更新时间:2023-11-01 01:01:41 29 4
gpt4 key购买 nike

我正在尝试拦截渲染函数或响应在加载 View ( Twig )之前向其添加变量。

我试图覆盖默认的渲染方法,但它还是给我

Variable "myvar" does not exist in /path/to/baseAppLite.html.twig at line 10

我的代码有什么问题,有没有更好的方法?

这是我在 baseController 中的覆盖代码

public function render($view, array $parameters = array(), Response $response = null)
{
$parameters = array_merge(
$parameters,
array(
'myvar' => 'GlobalVar'
)
);
return parent::render($view, $parameters, $response);
}

用法

{{ myvar }}

更新:据我所见,渲染功能未加载因为我尝试回显“render bar foo”但没有显示任何内容

最佳答案

老实说,我认为渲染函数根本不需要重写。根据全局变量的设置(或计算)方式,我可以想到几种访问某种全局变量的方法。

Twig 全局

如果它是一个硬编码变量,那么您可以将它作为 twig 全局变量之一添加到您的 config.yml 中,就像这样......

# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x

然后可以像...一样使用

<p>The google tracking code is: {{ ga_tracking }}</p>

如此处解释 - http://symfony.com/doc/current/cookbook/templating/global_variables.html

Twig 函数

或者,如果您的变量以某种方式与外部服务相关,您可以使用自定义 Twig 函数并在模板中调用它。

Twig 扩展(具有功能)..

class AcmeExtension extends \Twig_Extension
{
protected $container;

public function __construct(ContainerInterface $container = null)
{
$this->container = $container;
}

public function getFunctions()
{
return array(
new \Twig_SimpleFilter(
'get_parameter',
array($this, 'getParameter')
),
);
}

public function getParameter($parameter)
{
if (null === $this->container) {
return null;
}

return $this->container->getParameter($parameter);
// You could also do perform some kind of action
// rather than just return a value
}

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

注册为服务..

services:
acme.twig.acme_extension:
class: Acme\DemoBundle\Twig\AcmeExtension
arguments:
- @service_container
tags:
- { name: twig.extension }

然后在您的模板中您可以使用..

{{ get_parameter('myVar') }}

甚至..

{% set myVar = get_parameter('myVar') %}

关于php - 来自基本 Controller symfony2 的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23422139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com