如何从外部遗留系统访问Symfony2服务?

时间:2012-06-09 14:28:44

标签: symfony

我们正在慢慢地将当前系统迁移到Symfony2,但大多数代码库仍然在内部框架中。我想从旧的遗留框架中的类中利用Symfony2中构建的一些功能。是否有一种从Symfony框架外部访问Symfony2服务的简单方法?

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

我的假设是,这将失败,因为不会注入依赖项。

1 个答案:

答案 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进行分发。

这种策略非常好,因为你可以保留遗留应用程序几乎不受影响并逐个杀死它。