php – 如何在遗留应用程序中使用Symfony 2 Container

前端之家收集整理的这篇文章主要介绍了php – 如何在遗留应用程序中使用Symfony 2 Container前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
希望将遗留应用程序与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);

猜你在找的PHP相关文章