如何使symfony Controller变量成为全局变量?

时间:2017-11-26 09:32:35

标签: symfony symfony-3.3 symfony-3.4

public indexFunction(){
  $var = 'Apple';
  //set $var global
}

这样就可以在基本模板中访问$var

3 个答案:

答案 0 :(得分:1)

您必须将变量传递给模板:

// AppBundle/Controller/DefaultController.php
public indexFunction()
{
    $var = 'Apple';

    return $this->render('index.html.twig', array(
        'var' => $var,
    ));
}

如果你真的想让一个全局变量可用于你的所有模板,你应该在你的twig配置中设置它:

# app/config/config.yml
twig:
    globals:
        var: 'value'

之后,您可以使用{{ var }}

在树枝模板中写出变量的值

编辑:

最后使用会话的示例 - 将变量保存到会话中

// 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') }}

答案 1 :(得分:1)

如果你想把它作为静态值,只需把它放在配置文件中:

    # app/config/config.yml

     twig:
         globals:
         var: 'Apple'

如果你想将它作为动态变量,你可以给树枝提供服务ID:

twig:
globals:
    # the value is the service's id
    var: '@AppBundle\Service\yourData'

答案 2 :(得分:1)

<强>动态:

在捆绑路径中(例如: src / AppBundle ),添加一个名为&#34; YourNameTwigExtension.php &#34;的文件。此文件将是一个类( YourNameTwigExtension ),它扩展了&#34; \ Twig_Extension &#34;类和实现接口&#34; \ Twig_Extension_GlobalsInterface &#34;。在&#34; YourNameTwigExtension &#34;内class实现 getGlobals ()方法。例如:

//....
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中,您将使用:{{user}},{{menu}},{{actions}}等...

警告:添加 app / config / services.yml

 twig.extension.yourname_twig_extension:
        class: YourBundle\YourNameTwigExtension
        tags:
            - { name: twig.extension }

<强>静态:

如果您需要使用静态变量,请在 app / config / parameters.yml 中填写:

twig:
    globals:
        portal_name: 'Portal'
        portal_img_logo: logo.png
        portal_favicon: favicon.ico
        logowidth: 350px

Symfony Doc:How to Inject Variables into all Templates (i.e. global Variables)

对不起我的英文.. 好工作