【问题标题】:Bridging a legacy app sessions with silex app sessions将遗留应用程序会话与 silex 应用程序会话桥接
【发布时间】:2014-11-01 11:55:49
【问题描述】:

我试图通过将旧应用程序放在 web 文件夹中来将旧应用程序包装在 silex 中,并在请求更新时慢慢地用新的基于控制器的 silex 代码替换部分。旧的应用程序是一个扁平的 php,没有基于控制器的应用程序,在接下来的 16 个月内没有预算用于完全重写的时间。将遗留的平面代码放在 web 文件夹中具有预期的效果,如果找到文件,则路由不会生效。我现在需要帮助的是配置​​ silex 以使用其他代码使用的 php 会话,反之亦然。

我发现这篇 Symfony 帖子似乎表明了我想要这样做的方式,但是这些示例的结构与我们的 silex 设置的配置方式不同。 http://symfony.com/doc/current/cookbook/session/php_bridge.html

我们目前如何在 silex 中开始会话。 $ app-> register(new ServiceSessionProvider());

抱歉缺少实际代码,今天晚些时候回到电脑前将使用代码 sn-ps 进行编辑。

感谢您在集成旧会话方面的任何和所有帮助。

【问题讨论】:

    标签: php silex legacy-code sessionstorage


    【解决方案1】:

    当谈到使用相同的会话时,我们选择的选项......不太理想,但它允许我们继续我们的计划,而不会妨碍使用任何一个应用程序。当前计划是在我们完成将应用程序代码迁移到 Silex 后实施数据库存储会话。

    我们选择了在这篇文章Symfony session avoid _sf2_attributes 中首次确定的选项。这是一个相当丑陋的解决方案,但允许我们在尝试以最少的前期工作及时迁移应用程序时所需的灵活性。目标是将其完全迁移到新的 Silex 应用程序中,但这样做的时间框架是一年多或更长时间。

    这是在我们的 Silex 应用程序中配置会话的方式。它正在使用基于文件的存储。

    $app->register(new Silex\Provider\SessionServiceProvider(), array(
      'cookie_lifetime' => 86400,
    ));
    $app['session.storage'] = $app->share(function () use ($app) {
      return new \Symfony\Component\HttpFoundation\Session\Storage\LegacySessionStorage;
    });
    

    这是最初位于 here 的控制器代码的副本,以防它在某个时候被删除。

    <?php
    
    use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
    
    /**
     * Session sotrage that avoids using _sf2_attributes subkey
     * in the $_SESSION superglobal but instead it uses
     * the root variable.
     */
    class LegacySessionStorage extends NativeSessionStorage 
    {
    const SYMFONY_SESSION_SUBKEY = '_sf2_attributes';
    
    /**
     * @inheritdoc
     */
        protected function loadSession(array &$session = null)
        {
            if (null === $session) {
                $session = &$_SESSION;
            }
    
            parent::loadSession($session);
    
            foreach ($this->bags as $bag) {
                $key = $bag->getStorageKey();
    
                if (self::SYMFONY_SESSION_SUBKEY === $key)
                {
                    $bag->initialize($session);
                }
            }
        }
    }
    

    我希望这有助于其他一些人允许他们从一个棘手的旧应用程序迁移到新的编码风格。希望确保随着时间的推移总结我们的发现,以确保其他人在未来不必看起来那么有希望。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多