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