遗留应用程序和Symfony2之间的桥接会话数据

时间:2015-01-26 18:15:33

标签: php symfony session

很抱歉,如果在我找不到之前询问了这个问题。我找不到我想要的答案。

我有一个遗留的应用程序,我正在用Symfony2重建,不幸的是我需要并行运行一段时间,直到我可以完成重建整个系统。我需要让symfony能够访问遗留会话数据才能运行。

我在Symfony网站上发现了这个:http://symfony.com/doc/current/cookbook/session/php_bridge.html http://symfony.com/doc/current/components/http_foundation/session_php_bridge.html

但是我不明白配置是否需要发生以及我应该在哪里调用session-start以及如何从我的新应用程序访问会话数据。

我是否会在我创建的每个控制器中放置symfony中给出的示例?

use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;

// legacy application configures session
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/tmp');
session_start();

// Get Symfony to interface with this existing session
$session = new Session(new PhpBridgeSessionStorage());

// symfony will now interface with the existing PHP session
$session->start();

似乎应该有办法集中它。

更新  手册给出了一个例子,但它没有说它是否应该在某个地方进入控制器,服务,实体或配置。

我尝试在控制器中使用示例代码,当我在$ session上执行print_r时,我看不到任何遗留会话数据。

**

提前致谢。

1 个答案:

答案 0 :(得分:2)

您正在查看的是symfony使用的Component的示例代码。 Symfonys会话从设置到app / config.yml的参数初始化。仅当您使用symfony之外的组件时,才能使用组件说明。你想要的是第一个。但是使用:

#app/config.yml
framework:
    session:
        storage_id: session.storage.php_bridge
        handler_id: session.handler.native_file

如果您在实例化symfony之前调用session_start()的其他应用程序中包含symfony,则应该使用它。我没有测试过这个但是它可能仍然可以让它们并行运行但你可能最终不得不对会话处理程序进行一些自定义。

也许考虑使用pdo会话处理程序:http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html