2

背景情報

CakePHP v2.xx (私は v2.2.3 を使用しています) では、プラグインをロードする必要がありますapp/Config/bootstrap.php。ロードされるプラグインがわかっている場合は問題ありません。

pluginable をサポートする CMS を構築してい"modules"ます。もちろん、これにより、モジュールをプラグインとしてビルドし、それらを ( ) でグループ化するためにapp/Plugin呼び出されたサブディレクトリを追加しました。これも問題ありません。ただし、これらを動的にロードするには (インストール/アンインストールの有効化/無効化などに関してモジュールを制御できます)、その時点でデータベース アクセスが利用できないため、ブートストラップからディレクトリをスキャンする必要があります。ただし、フォルダーがフォルダー内に存在する場合、これは無効なプラグインをロードします。Modulesapp/Plugin/Modules/

主な質問

CakePlugin::loadAll()特定のフォルダーで見つかったすべてのプラグインを効果的にロードする方法はありますか (できれば DB 情報を使用します) - その中のどのフォルダーからプラグインをロードするかを指定できない限り、実行したくapp/Pluginありません (これは可能ではないようです)。ドキュメントで読んだこと)。

簡略化

  • app/Plugin/Modules(カスタム プラグイン サブフォルダー)からすべてのプラグインを読み込むにはどうすればよいですか?
  • app/Config/bootstrap.phpプラグインのカスタム リストのロードを支援するために、モデル内から何らかの形でクエリを実行できますか

更新:- 解決策

彼の答えをしてくれたburzumに感謝します-それは私が必要としていたものとまったく同じではありませんでしたが、非常に近く、彼のコードを使用して答えを整理することができました。今後の訪問者のために、私の最終的なコードは次のとおりです。

App::uses('ClassRegistry','Utility');
$Module = ClassRegistry::init('Module');
$activeModules = $Module->loadActive();
foreach($activeModules as $mod)
{
    CakePlugin::load($mod);
}

NB: burzum の提案はloadAllまだすべてのプラグインをロードするので使用しませんでしたが、データベースでプラグインが無効になっている/インストールされていないと言われている場合は、プラグインをまったくロードしたくありません。

4

1 に答える 1

2

app/Plugin/Modules (カスタム プラグイン サブフォルダ) からすべてのプラグインをロードするにはどうすればよいですか?

プラグインをロードする前に、App::build() の doc ブロックを読み、 bootstrap.php で呼び出します。カスタム パスをプラグイン パスに追加します。

app/Config/bootstrap.php 内からモデルをクエリして、プラグインのカスタム リストの読み込みを支援することはできますか?

App::uses('ClassRegistry', 'Utility');
$Module = ClassRegistry::init('Module');
$modules = $Module->loadActive();
foreach ($modules as $module) {
    CakePlugin::load($module);
}

loadActive() またはメソッドに名前を付けたものは、 CakePlugin::load() が期待するものと一致する配列構造を返すことを確認してください。

loadAll() と load() に関する部分を修正するために質問を更新しました。

于 2013-08-13T16:49:32.333 に答える