2012-06-09 45 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发送它们。

这个策略是非常好的,因为你可以让遗留应用几乎不变,并且一块一块杀死它。