我有一个在Zend Framework 1(ZF1)上运行的旧应用程序,我开始进行Symfony3(SF)迁移,因此我已经设置了一些.htaccess
规则,以使Symfony3在ZF1内部工作应用。基本上,如果我调用Symfony路由,它将转到Symfony控制器,否则转到ZF1控制器。
我需要在SF控制器中使用ZF1会话数据,但ZF1会话和SF会话完全以不同的方式工作,因此从SF调用ZF1会话不会起作用。 (我已经测试过了。)
然后我想到的是将相同的数据保存到两个会话对象中:ZF1用于遗留应用程序和新控制器上使用的SF,所以我最终会得到这样的结果:
// The following goes to an special ZF1 storage managed through Session
$this->view->user = Zend_Auth::getInstance();
$result = $this->view->user->getStorage()->read();
// This is a Symfony\Component\HttpFoundation\Session\Session
$session_1 = new Session(new PhpBridgeSessionStorage());
$session_1->start();
$session_1->set('result', $this->view->user->getStorage()->read());
// here $session_1 holds the values properly
$session_1->get('result');
Symfony会话配置如下:
session:
handler_id: session.handler.native_file
save_path: '%kernel.root_dir%/sessions'
然后在我的Symfony控制器中,我尝试访问存储的数据:
$session = new Session();
$result = $session->get('result');
但$session->get('result')
的值为null
,据我所知,它不应为空。我不知道目录结构是否是这个问题的原因,或者我做错了什么或者可能很简单,这根本不可能,因为Session()
对象实例由于目录结构而不同。
这就是目录的结构(很奇怪,但这是我到目前为止找到的唯一方法):
├── application
│ ├── api
│ ├── controllers -> ZF1 controllers
│ ├── forms
│ ├── layout
│ ├── models
│ ├── soap
│ └── views
...
├── oneview_symfony -> this is the SF app
│ ├── app
...
│ ├── var
│ ├── vendor -> it has his own /vendor folder and a /symfony libraries
│ └── web
...
└── vendor
...
├── symfony -> /symfony libraries are here as well
...
├── zendframework
更新
之前没有尝试过,但是现在关注@bishop建议我已经通过添加以下内容来弥合Symfony会话与ZF1会话(或者至少我认为我做过):
session:
storage_id: session.storage.php_bridge
handler_id: session.handler.native_file
save_path: '%kernel.root_dir%/sessions'
但它也不起作用,错误与result
获取null
之前的错误相同。
任何线索?想法?
答案 0 :(得分:0)
我同意@bishop并且你正确地弥合了会话,但我相信你的问题是不同的。我的假设是你的会话save_path不在Zend和Symfony应用程序之间共享。 您必须使用相同的路径才能工作。 尝试设置:
phpSettings.session.save_path = "/path/to/symfony/kernel/root/sessions"
在Zend框架应用程序的application.ini中。 替换为您的会话路径。