Mat*_*att 134
{{app.session}}是指Session对象而不是$_SESSION数组.我不认为该$_SESSION数组是可访问的,除非您明确地将其传递给每个Twig模板或者如果您执行使其可用的扩展.
Symfony2是面向对象的,因此您应该使用该Session对象来设置会话属性而不依赖于数组.该Session对象将从您那里抽象出这些东西,因此更容易将会话存储在数据库中,因为存储会话变量对您来说是隐藏的.
因此,在会话中设置属性并使用该Session对象检索树枝模板中的值.
// In a controller
$session = $this->get('session');
$session->set('filter', array(
'accounts' => 'value',
));
// In Twig
{% set filter = app.session.get('filter') %}
{% set account-filter = filter['accounts'] %}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
问候,
马特
小智 25
安装树枝
$twig = new Twig_Environment(...);
$twig->addGlobal('session', $_SESSION);
Run Code Online (Sandbox Code Playgroud)
然后在您的模板中访问会话值,例如
$_SESSION['username'] in php file Will be equivalent to {{ session.username }} in your twig template
Run Code Online (Sandbox Code Playgroud)
小智 20
一个简单的技巧是将$ _SESSION数组定义为全局变量.为此,通过添加此函数编辑扩展文件夹中的core.php文件:
public function getGlobals() {
return array(
'session' => $_SESSION,
) ;
}
Run Code Online (Sandbox Code Playgroud)
然后,您将能够访问任何会话变量:
{{ session.username }}
Run Code Online (Sandbox Code Playgroud)
如果你想访问
$_SESSION['username']
Run Code Online (Sandbox Code Playgroud)
joa*_*16v 12
在Twig中访问会话变量的方法是:
{{ app.session.get('name_variable') }}
Run Code Online (Sandbox Code Playgroud)
我发现最干净的方法是创建一个自定义的TwigExtension并覆盖它的getGlobals()方法.$_SESSION使用Symfony的Session类更好,而不是使用,因为它自动处理启动/停止会话.
我在/src/AppBundle/Twig/AppExtension.php中有以下扩展名:
<?php
namespace AppBundle\Twig;
use Symfony\Component\HttpFoundation\Session\Session;
class AppExtension extends \Twig_Extension {
public function getGlobals() {
$session = new Session();
return array(
'session' => $session->all(),
);
}
public function getName() {
return 'app_extension';
}
}
Run Code Online (Sandbox Code Playgroud)
然后在/app/config/services.yml中添加:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)
然后可以使用以下任意视图访问会话:
{{ session.my_variable }}
Run Code Online (Sandbox Code Playgroud)