背景资料
在 CakePHP v2.xx(我使用的是 v2.2.3)中,app/Config/bootstrap.php
如果您知道要加载哪些插件,则必须加载插件。
我正在构建一个 CMS,它将支持 pluginable "modules"
。这当然会导致我将模块构建为插件,app/Plugin
然后我添加了一个名为的子目录Modules
以将它们分组在 ( app/Plugin/Modules/
) 中,再次很好。但是,为了动态加载这些(模块将在启用/禁用安装/卸载等方面可控),我必须从引导程序扫描目录,因为此时数据库访问不可用。尽管如果文件夹中存在该文件夹,这仍会加载禁用的插件。
主要问题
有没有办法有效地加载在某个文件夹中找到的所有插件(最好使用 DB 信息) - 我不想运行CakePlugin::loadAll()
,除非我可以指定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);
}
注意:我没有使用 burzum 的建议,loadAll
因为它仍然会加载所有插件,但是如果数据库说它们被禁用/未安装,我根本不想加载这些插件。