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

How to work with sessions in Silex (Symfony)

我的 objective 是学习如何在 Silex 1.2 / Symfony 中使用会话。

但是,当我这样做时: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