如何在Silex中使用会话(Symfony)

时间:2017-11-27 10:55:32

标签: php symfony session silex

我的目标是学习如何在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');

1 个答案:

答案 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