1

私は現在、バンドル以外の何かが必要なプロジェクトに取り組んでいます。私が「モジュール」と呼ぶもの。プロジェクトの開始時に、どの「モジュール」が使用され、どのように構成されるかをシステムが認識していないという点で、バンドルとは異なる必要があります。

また、これらのモジュールをバンドルと同様に使用します

$response = $this->forward('AcmeHelloModule:Hello:fancy');

また

$response = $this->forward('Acme/Hello:Hello:fancy');

ここで HelloController->fancyAction(); 実行されます。そして、このコントローラーは、ファイル /src/modules/Acme/Hello/Controller/HelloController.php に記述されています

問題は、これをどのように実装するかです。

4

2 に答える 2

0

解決策は、いわゆるモジュールを動的にインストール、ロード、および実行できるPluginBundleを実装することです。

PluginBundleには特定のプラグインコードはまったく含まれていませんが、モジュール/プラグインのランタイム環境が含まれています。次に、有効になっているプラ​​グイン/モジュールをデータベースに保存し、実行時に動的にロードします。

このソリューションを使用すると、wordpressのように動的なプラグインメカニズムを作成できるはずです。バンドルを無効にするときにもキャッシュをクリアする必要があるため、実行時にAppKernelを変更することは適切な解決策ではありません。

于 2012-06-12T13:00:10.313 に答える
0

AppKernel で、次のメソッドを追加します。

public function getBundle($name, $first = true)
{
    if (substr($name, -6) == 'Module')) {
        return $this->getBundle('ModuleBundle')->getModule($name, $first);
    }

    return parent::getBundle($name, $first);
}

すべてのロジックは ModuleBundle で実行されます。ただし、応答のタイプが Kernel->getBundle(); と同じであることを確認してください。

于 2012-06-12T07:38:31.570 に答える