我是cakeph3的新手,所以如果我做错了,请指导我。我写了一个插件,它以插件的zip文件为输入,解压缩并上传到插件文件夹。
问题是,插件名称需要添加到comsposer.json
中并加载到bootstrap.php
中。还有一个额外的步骤需要执行,我必须运行composer dump-autoload
才能使插件正常工作。如果不执行这些步骤,cakephp3
将给出错误:
Error: Create the class FileUploaderController below in file: srcControllerFileUploaderController.php
到目前为止,我已经尝试手动执行这些步骤,插件运行良好。我想知道我的方向是否正确?如果是,那么如何通过代码执行上述步骤。
我想通过代码执行的任务是:
- 更新Composer.json
- 在bootstrap.php中加载插件
- 运行命令或获得
composer dump-autoload
的等效功能
如有任何帮助,我们将不胜感激。:)
更新:1我看到了同样使用手动方法的链接。但我想通过代码来实现。
更新2我找到了执行composer dump-autoload
的方法。可以这样做:
shell_exec('composer dump-autoload');
但我仍然想知道这是否是正确的方式。
最后,我找到了问题的解决方案。必须在Bootstrap.php
中加载带有autoload
参数true
的插件。
不需要编辑composer.json,也不需要执行任何命令。
我刚刚在我的控制器中添加了以下功能,用autoload=true
更新bootstrap.php
function modifyBootstrap($plugin)
{
$bootstrap = new File(ROOT . DS . 'config' . DS . 'bootstrap.php', false);
$contents = $bootstrap->read();
if (!preg_match("@ns*Plugin::loadAll@", $contents)) {
$autoload = "'autoload' => true, ";
$bootstrap->append(sprintf(
"nPlugin::load('%s', [%s'bootstrap' => false, 'routes' => true]);n",
$plugin,
$autoload
));
}
}
一旦我执行了这一步,通过我的插件上传的任何插件都像做梦一样工作。