如何在 Silex (Symfony) 中使用会话
How to work with sessions in Silex (Symfony)
我的 objective 是学习如何在 Silex 1.2 / Symfony 中使用会话。
- 第一步是与
Session()
创建会话。
我想将它存储到 $app['session']
.
- 第二步是访问存储在会话变量中的数据。
- 最后一步是使用
invalidate()
函数销毁会话。
但是,当我这样做时:var_dump($app['session']->get('user'));
我得到这个错误:
Identifier "session" is not defined
如何从项目中的任何位置访问 $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');
您只是在第一条路线中定义了会话服务。任何其他人都不知道该标识符,因此根本无法对其进行操作。会话数据本身在请求中是持久的,但不是服务的实际创建。
行
$app['session'] = new Symfony\Component\HttpFoundation\Session\Session();
$app['session']->start();
需要移出任何特定于路由的配置(通常移到 src/app.php
等配置文件中,尽管您的结构可能不同)。
$app['session']
将可用于您的任何 routes/controller methods/etc.
您可能还想考虑使用 SessionServiceProvider
class,它将负责注册此服务并提供其他有用的好处,例如在 request/response 循环。参见 https://silex.symfony.com/doc/1.3/providers/session.html
我的 objective 是学习如何在 Silex 1.2 / Symfony 中使用会话。
- 第一步是与
Session()
创建会话。 我想将它存储到$app['session']
. - 第二步是访问存储在会话变量中的数据。
- 最后一步是使用
invalidate()
函数销毁会话。
但是,当我这样做时:var_dump($app['session']->get('user'));
我得到这个错误:
Identifier "session" is not defined
如何从项目中的任何位置访问 $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');
您只是在第一条路线中定义了会话服务。任何其他人都不知道该标识符,因此根本无法对其进行操作。会话数据本身在请求中是持久的,但不是服务的实际创建。
行
$app['session'] = new Symfony\Component\HttpFoundation\Session\Session();
$app['session']->start();
需要移出任何特定于路由的配置(通常移到 src/app.php
等配置文件中,尽管您的结构可能不同)。
$app['session']
将可用于您的任何 routes/controller methods/etc.
您可能还想考虑使用 SessionServiceProvider
class,它将负责注册此服务并提供其他有用的好处,例如在 request/response 循环。参见 https://silex.symfony.com/doc/1.3/providers/session.html