2012-06-09 68 views
2

我們正在慢慢地將我們的當前系統遷移到Symfony2,但是大部分代碼庫仍處於內部框架中。我想從舊的遺留框架的類中利用Symfony2中構建的一些功能。有沒有一種簡單的方法可以從Symfony框架之外訪問Symfony2服務?如何從外部遺留系統訪問Symfony2服務?

class MyOldClass extends SomethingOld 
{ 
    public function getSomethingViaSymfony() 
    { 
     $service = new SomeSymfonyService(); 
     $results = $service->getResults(); 
    } 
} 

我的假設是,這將是一個失敗,因爲依賴不會被注入。

回答

1

您需要初始化symfony而不分配任何操作。這基本上意味着從web/index.php中的symfony前端控制器文件獲取代碼,稍微修改它並將其粘貼到舊應用的某個初始化文件中。

// legacy/init.php 
require_once 'PATH_TO_SYMFONY/app/bootstrap.php.cache'; 
require_once 'PATH_TO_SYMFONY/app/AppKernel.php'; 


$kernel = new AppKernel('dev', true); 
$kernel->loadClassCache(); 

$GLOBALS['service_container'] = $kernel->getContainer(); 

注意,該代碼沒有測試,但我敢肯定它會工作,因爲symfony的是偉大的;)

還你會考慮在其中嵌入遺留行動統一到一個不同的策略symfony而不是其他方式。

你將不得不實現一個傳統控制器,並在路由定義結束時給它一個捕獲所有路由。該控制器可以初始化遺留應用程序並向其發送操作。之後,您可以在路由文件的頂部依次定義新路線並使用symfony發送它們。

這個策略是非常好的,因爲你可以讓遺留應用幾乎不變,並且一塊一塊殺死它。