上传一个新插件并更新cakehp3中composer.json的插件



我是cakeph3的新手,所以如果我做错了,请指导我。我写了一个插件,它以插件的zip文件为输入,解压缩并上传到插件文件夹。

问题是,插件名称需要添加到comsposer.json中并加载到bootstrap.php中。还有一个额外的步骤需要执行,我必须运行composer dump-autoload才能使插件正常工作。如果不执行这些步骤,cakephp3将给出错误:

Error: Create the class FileUploaderController below in file: srcControllerFileUploaderController.php

到目前为止,我已经尝试手动执行这些步骤,插件运行良好。我想知道我的方向是否正确?如果是,那么如何通过代码执行上述步骤。

我想通过代码执行的任务是:

  1. 更新Composer.json
  2. 在bootstrap.php中加载插件
  3. 运行命令或获得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
));
}
}

一旦我执行了这一步,通过我的插件上传的任何插件都像做梦一样工作。

相关内容

  • 没有找到相关文章

最新更新