希望将遗留应用程序与Symfony 2应用程序集成 – 用Symfony组件替换旧应用程序的越来越多部分.我将采用的方法是在遗留应用程序中使用Symfony 2容器来获取已为Symfony 2应用程序配置的服务.我想要使用的第一个服务是会话和安全上下文.
问题:
>这可行吗?
>如何获取配置的服务容器?
遗留应用程序中的更多信息:典型的PHP混乱:单个PHP文件,作为“控制器”(为不同的执行路径检查$_GET和$_POST).每个页面都包含init.PHP,它设置了自动加载,数据库连接等.会话管理有自己的类(我想替换它),通过调用数据库对象的静态方法(!)来检索数据.
使用Symfony的DIC作为独立组件
is possible,但您必须“手动”执行许多操作(因为您不打算从一开始就使用完整的Symfony Framework).你可能不会在所有遗留的东西上使用DIC.
如果你想走这条路,我会考虑先选择另一个组件(比如HttpFoundation和HttpKernel).
正如@Cerad建议您可以将您的遗留代码包装在Symfony中.看看IngewikkeldWrapperBundle捆绑.你不能按原样使用它,但它可能会给你一些想法.
还有第三种方式.
您可以决定在Symfony应用程序中实现每个新功能.然而,您可以将遗留应用程序和Symfony应用程序共存.在服务器级别(即Nginx)上,您可以将旧版应用程序的旧URL和所有迁移的URL代理到Symfony2应用程序.在我的情况下,这种情况是最好的选择,并证明是有效的.但是,我们承诺放弃遗留应用程序开发(因此每个新功能或更改都必须在Symfony2应用程序中开发).
编辑:以下是如何在旧版应用程序中启动Symfony内核并分派事件(防火墙所需):
$kernel = new \AppKernel('dev',true); $kernel->boot(); $request = Request::createFromGlobals(); $request->attributes->set('is_legacy',true); $request->server->set('SCRIPT_FILENAME','app.PHP'); $container = $kernel->getContainer(); $container->enterScope('request'); $container->get('request_stack')->push($request); $container->set('request',$request); $event = new GetResponseEvent($kernel,$request,HttpKernelInterface::MASTER_REQUEST); $eventDispatcher = $container->get('event_dispatcher'); $eventDispatcher->dispatch('kernel.request',$event);