CakePHP 3.7.1 中未加载插件

Plugin not loaded in CakePHP 3.7.1

我在插件文件夹中创建了名称为 "Administrator" 的自定义插件。我还添加了所需的文件夹。我添加了以下代码:

内部:plugins/Administrator/config/route.php

use Cake\Routing\Route\DashedRoute;
use Cake\Routing\Router;
Router::plugin(
    'Administrator',
       ['path' => '/admin'],
       function ($routes) {
          $routes->fallbacks(DashedRoute::class);
       }
  );

内部:src/Application.php

$this->addPlugin('Administrator', ['routes' => true]);

内部:config/route.php

$routes->scope('/admin', function ($routes) {
    $routes->loadPlugin('Administrator');
});

当我在浏览器中输入 http://localhost/c3app/admin/users

显示错误“错误:找不到 AdminController。

我在 composer.json 文件中添加了代码

 "autoload": {
    "psr-4": {
        "App\": "src/",
        "Administrator" : "./plugins/Administrator/src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Test\": "tests/",
        "Cake\Test\": "vendor/cakephp/cakephp/tests/",
        "Administrator" : "./plugins/Administrator/src"
    }
},

首先,文件应命名为 routes.php 而不是 route.php

config/routes.php 中删除代码。
接下来,在 plugins/Administrator/config/routes.php 中添加以下代码:

Router::prefix('admin', function (RouteBuilder $routes) {
    $routes->plugin('Administrator', function (RouteBuilder $routes) {
        $routes->fallbacks();
    });
});

config/bootstrap.php中添加以下代码:

Plugin::load('Auth', [
    'autoload' => true,
    'routes' => true,
]);

自 CakePHP 3.7.* 起,插件必须在 composer.json 中注册以确保自动加载。

如果您手动创建插件或使用 cake bake plugin 并且您 而不是 覆盖 composer.json(默认),则可能会发生此错误。

如果您通过

App\Application::bootstrap() 中加载插件

$this->addPlugin('Admin', ['bootstrap' => true, 'routes' => true]);

它触发 Cake\Http\BaseApplication::makePlugin 中的一个方法,该方法调用 class_exists() 函数。但这仅在插件在 composer/autoload 中注册并且 class 将被找到时才有效。

要解决此问题,请将插件添加到 composer.json 文件:

"autoload": { "psr-4": { "App\": "src/", "Administrator\": "./plugins/Administrator/src/" } },

并刷新作曲家自动加载文件:

composer dumpautoload

似乎是 CakePHP 3.7.0 中的错误。和 3.7.1.

不是错误,请参阅 CodeWhisperer 的评论