【问题标题】:Plugin that uploads a new plugin and updates composer.json in cakephp3上传新插件并更新 cakephp3 中的 composer.json 的插件
【发布时间】:2016-06-03 12:12:49
【问题描述】:

我是 cakephp3 的新手,如果我出错了,请指导我。 我编写了一个插件,它以插件的 zip 文件作为输入,解压缩并将其上传到插件文件夹。

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

Error: Create the class FileUploaderController below in file: src\Controller\FileUploaderController.php

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

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

  1. 更新 Composer.json
  2. 在 bootstrap.php 中加载插件
  3. 运行命令或获得与composer dump-autoload等效的功能

任何帮助将不胜感激。 :)

更新:1 我遇到了同样使用手动方法的link。但我想通过代码来实现。

更新 2 我找到了执行composer dump-autoload 的方法。可以这样做:

shell_exec('composer dump-autoload');

但我仍然想知道它是否正确。

【问题讨论】:

    标签: php cakephp composer-php cakephp-3.0


    【解决方案1】:

    最后,我找到了解决问题的方法。该插件必须使用autoload 参数true 加载到Bootstrap.php

    没有 composer.json 被编辑并且没有命令被执行。

    我刚刚在我的控制器中添加了以下函数,该函数将bootstrap.php 更新为autoload=true

    function modifyBootstrap($plugin)
    {
        $bootstrap = new File(ROOT . DS . 'config' . DS . 'bootstrap.php', false);
        $contents = $bootstrap->read();
        if (!preg_match("@\n\s*Plugin::loadAll@", $contents)) {
            $autoload = "'autoload' => true, ";
            $bootstrap->append(sprintf(
                "\nPlugin::load('%s', [%s'bootstrap' => false, 'routes' => true]);\n",
                $plugin,
                $autoload
            ));
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2012-02-28
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多