背景信息
在CakePHP v2.xx中(我使用的是v2.2.3),必须在app/Config/bootstrap.php
中加载插件,如果您知道要加载哪些插件,这很好。
我正在构建一个CMS,它将支持可插入的"modules"
。这当然导致我将模块构建为插件以进入app/Plugin
并添加了一个名为Modules
的子目录,将它们分组在(app/Plugin/Modules/
)中,再次没问题。但是,为了动态地加载这些负载(模块在启用/禁用安装/卸载等方面可以控制),我必须从引导程序扫描目录,因为此时数据库访问不可用。虽然文件夹中存在文件夹,但仍会加载禁用的插件。
主要问题
有没有办法有效加载某个文件夹中找到的所有插件(最好使用数据库信息) - 我不想运行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
建议,因为它仍然加载所有插件,但是如果数据库说它们被禁用/未安装,我根本不想加载插件。 / p>
答案 0 :(得分:2)
如何从app / Plugin / Modules(自定义插件)加载所有插件 子文件夹)
Read the doc block of App::build()并在加载任何插件之前在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()vs load()的部分的问题。