我们正在慢慢地将当前系统迁移到Symfony2,但大多数代码库仍然在内部框架中。我想从旧的遗留框架中的类中利用Symfony2中构建的一些功能。是否有一种从Symfony框架外部访问Symfony2服务的简单方法?
class MyOldClass extends SomethingOld
{
public function getSomethingViaSymfony()
{
$service = new SomeSymfonyService();
$results = $service->getResults();
}
}
我的假设是,这将失败,因为不会注入依赖项。
答案 0 :(得分: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进行分发。
这种策略非常好,因为你可以保留遗留应用程序几乎不受影响并逐个杀死它。