希望将遗留应用程序与Symfony 2应用程序集成--将越来越多的旧应用程序部分替换为Symfony组件。我将采取的方法是在遗留应用程序中使用Symfony 2容器来获取已经为Symfony 2应用程序配置的服务。我想使用的第一个服务是会话和安全上下文。
问题:
遗留应用程序中的更多信息:典型的PHP :单个PHP文件,作为“控制器”(检查$_GET和$_POST是否有不同的执行路径)。每个页面都包括设置自动加载、数据库连接等的init.php
。会话管理有自己的类(我想替换),通过调用静态方法(!)检索数据。数据库对象。
发布于 2012-04-16 09:45:36
使用Symfony的DIC作为独立组件是可能的,但是您必须“手动”执行许多事情(因为您从一开始就不打算使用完整的Symfony框架)。您可能不会在所有遗留的东西中使用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);
发布于 2012-04-17 04:45:35
我相信您可以像这样从遗留应用程序中访问容器实例
$kernel = new AppKernel('prod', true);
$kernel->loadClassCache();
$kernel->boot();
$request = Request::createFromGlobals();
$container = $kernel->getContainer();
$sc = $container->get('security.context');
https://stackoverflow.com/questions/10170989
复制相似问题