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

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

4

3 回答 3

2

如果您希望它作为静态值,只需将其放入配置文件中:

    # app/config/config.yml

     twig:
         globals:
         var: 'Apple'

如果您希望它作为动态变量,您可以为树枝提供服务 ID:

twig:
globals:
    # the value is the service's id
    var: '@AppBundle\Service\yourData'
于 2017-11-29T13:33:17.960 回答
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') }}
于 2017-11-26T09:53:31.993 回答
1

动态的:

在包路径(例如:src/AppBundle)中添加一个名为“ YourNameTwigExtension.php ”的文件。该文件将是一个扩展“ \Twig_Extension ”类并实现接口“ \Twig_Extension_GlobalsInterface ”的类( YourNameTwigExtension ) 。在“ YourNameTwigExtension ”类中实现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:如何将变量注入所有模板(即全局变量)

对不起我的英语..干得好

于 2017-12-06T23:01:05.207 回答