【问题标题】:How to work with sessions in Silex (Symfony)如何在 Silex (Symfony) 中使用会话
【发布时间】:2017-11-27 10:55:32
【问题描述】:

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

【问题讨论】:

    标签: php symfony session silex


    【解决方案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

    【讨论】:

    • 我只需要添加$app->register(new Silex\Provider\SessionServiceProvider());,然后$app['session'] 就可以工作了吗?这只是一个假设。它似乎工作......
    • 是的,我认为这应该是你所需要的一切,虽然我还没有一份 Silex 1.x 的副本可以确定
    • 非常感谢!我会更详细地尝试,我会告诉你的。
    • 根据我的需要完美地工作。我现在必须找到对路线的限制访问。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2010-12-18
    • 2012-04-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多