背景情報
CakePHP v2.xx (私は v2.2.3 を使用しています) では、プラグインをロードする必要がありますapp/Config/bootstrap.php
。ロードされるプラグインがわかっている場合は問題ありません。
pluginable をサポートする CMS を構築してい"modules"
ます。もちろん、これにより、モジュールをプラグインとしてビルドし、それらを ( ) でグループ化するためにapp/Plugin
呼び出されたサブディレクトリを追加しました。これも問題ありません。ただし、これらを動的にロードするには (インストール/アンインストールの有効化/無効化などに関してモジュールを制御できます)、その時点でデータベース アクセスが利用できないため、ブートストラップからディレクトリをスキャンする必要があります。ただし、フォルダーがフォルダー内に存在する場合、これは無効なプラグインをロードします。Modules
app/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
まだすべてのプラグインをロードするので使用しませんでしたが、データベースでプラグインが無効になっている/インストールされていないと言われている場合は、プラグインをまったくロードしたくありません。