使用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);
我不能說是否有可能或不...當然是,但它是值得的?要實現服務容器,考慮到你必須實現Symfony2內核,這是框架的核心。 – AlterPHP 2012-04-16 08:50:10
如果沒有任何有關舊版應用程序結構的信息,就不可能回答這個問題,除非說它可能不適用於沒有重寫的非OOP代碼。 – GordonM 2012-04-16 09:09:22
我做了這樣的事情。我用普通的S2來實現S2控制器的動作。然後從控制器中調用我的遺留初始化代碼,然後將其稱爲控制器。非常黑客,但它工作正常。我不認爲你會得到一個正確配置的S2會話對象沒有這樣做的運氣很多。 – Cerad 2012-04-16 12:55:16