2

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

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

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

4

1 回答 1

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 调度它们。

恕我直言,这种策略要好得多,因为您可以让遗留应用程序几乎不受影响并逐个杀死它。

于 2012-06-12T00:01:42.477 回答