我的目标是学习如何在Silex 1.2 / Symfony中使用会话。
Session()
创建会话。
我想将其存储到$app['session']
。invalidate()
函数销毁会话。但是,当我这样做时:var_dump($app['session']->get('user'));
我收到此错误:
标识符“会话”未定义
如何从项目的任何位置$app['session']
访问?
// create session
$routes->get('/test1', function () use ($app) {
$app['session'] = new Symfony\Component\HttpFoundation\Session\Session();
$app['session']->start();
$app['session']->set('user', 'test');
return $app['twig']->render('test1.html.twig');
})
->bind('test1');
// try to access on session data
$routes->get('/test2', function () use ($app){
var_dump($app['session']->get('user'));
return $app['twig']->render('test2.html.twig');
})
->bind('test2');
// remove session
$routes->get('/test3', function () use ($app){
$app['session']->invalidate();
return $app['twig']->render('test3.html.twig');
})
->bind('test3');
答案 0 :(得分:1)
您只在第一条路线中定义会话服务。任何其他人都不知道该标识符,因此根本无法对其进行操作。会话数据本身在请求之间是持久的,但不是实际创建的服务。
行
$app['session'] = new Symfony\Component\HttpFoundation\Session\Session();
$app['session']->start();
需要移出任何特定于路由的配置(通常是src/app.php
之类的配置文件,尽管您的结构可能不同)。
$app['session']
可用于任何路由/控制器方法/等。
您可能还需要考虑使用SessionServiceProvider
类,它将负责注册此服务并提供其他有用的好处,例如在请求/响应周期结束时保存会话。见https://silex.symfony.com/doc/1.3/providers/session.html