如何使symfony控制器变量成为全局变量?
这样就可以在基本模板中访问如何使symfony控制器变量成为全局变量?,symfony,symfony-3.3,symfony-3.4,Symfony,Symfony 3.3,Symfony 3.4,这样就可以在基本模板中访问$var。您必须将变量传递给模板: public indexFunction(){ $var = 'Apple'; //set $var global } 如果您真的想让全局变量可用于所有模板,则应在细枝配置中进行设置: // AppBundle/Controller/DefaultController.php public indexFunction() { $var = 'Apple'; return $this->render('
$var
。您必须将变量传递给模板:
public indexFunction(){
$var = 'Apple';
//set $var global
}
如果您真的想让全局变量可用于所有模板,则应在细枝配置中进行设置:
// AppBundle/Controller/DefaultController.php
public indexFunction()
{
$var = 'Apple';
return $this->render('index.html.twig', array(
'var' => $var,
));
}
之后,您可以使用{{var}
编辑:
或者最后一个使用会话的示例—将变量保存到会话中
# app/config/config.yml
twig:
globals:
var: 'value'
之后,您可以像这样在细枝模板中检索它
// AppBundle/Controller/DefaultController.php
public indexFunction()
{
$var = 'Apple';
$session = $this->get('session');
$session->set('var', $var);
...
}
如果要将其作为静态值,只需将其放入配置文件:
{# /app/Resources/views/base.html.twig #}
{{ app.session.get('var') }}
如果希望将其作为动态变量,可以为该细枝提供服务id:
# app/config/config.yml
twig:
globals:
var: 'Apple'
动态: 在bundle路径(例如:src/AppBundle)中添加一个名为“YourNameTwigExtension.php”的文件。此文件将是一个类(YourNameTwigeExtension),它扩展“\Twig\u Extension”类并实现接口“\Twig\u Extension\u GlobalInterface”。在“YourNameTwigExtension”类中实现getGlobals()方法。例如:
twig:
globals:
# the value is the service's id
var: '@AppBundle\Service\yourData'
在TWIG中,您将使用:{{user}}、{{menu}}、{{actions}等
警告:加载项app/config/services.yml:
//....
class YourNameTwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface {
//...
public function getGlobals() {
$data = array();
$data['user'] = $this->session->get('user');
$data['menu'] = $this->session->get('menu');
$data['actions'] = $this->session->get('actions');
$data['view'] = $this->session->get('view');
return $data;
}
}
twig.extension.yourname_twig_extension:
class: YourBundle\YourNameTwigExtension
tags:
- { name: twig.extension }
静态:
如果需要使用静态变量,请在app/config/parameters.yml中:
//....
class YourNameTwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface {
//...
public function getGlobals() {
$data = array();
$data['user'] = $this->session->get('user');
$data['menu'] = $this->session->get('menu');
$data['actions'] = $this->session->get('actions');
$data['view'] = $this->session->get('view');
return $data;
}
}
twig.extension.yourname_twig_extension:
class: YourBundle\YourNameTwigExtension
tags:
- { name: twig.extension }
Symfony文件:
对不起,我的英语干得好 对不起,我是新来的。。我在文件中看到了,但我不明白;(如果希望在任何位置访问变量(或在请求之间保存变量)你需要使用redis、memcached等存储设备。你也可以使用会话。对不起,我已经快速阅读了问题,因此确实必须按照答案中的建议使用Twig globals。我知道这两者。我的意思是说如何使$var成为全局的。这样“苹果”就可以打印在任何地方…你想用它做什么?在任何地方?在任何行动中在控制器或任何细枝模板中定义?我已经添加了使用PHP会话的示例,如@PizzaLover@PrananSubba我想这就是你想要的,使用yaml配置获取静态值,或者使用服务版本获取动态值一个有用的.Displaying{var}显示的错误类似于“cannotconvert to string”,因为您传递的变量是一个数组,您可以像访问数组一样访问其中的数据尝试转储变量以查看如何访问其中的值{var.var.your value key}在symfony 4上,您需要实现
Twig\Extension\GlobalsInterface
而不是Twig\u Extension\u GlobalsInterface