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 に答える