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);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...