未在CakePHP 3.7.1中加载插件

时间:2018-12-28 09:44:44

标签: cakephp cakephp-3.0

我在插件文件夹中创建了名为“ 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"
    }
},

2 个答案:

答案 0 :(得分:1)

自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中注册并且将找到该类的情况下有效。

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

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

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

composer dumpautoload

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

不是bug,请参阅CodeWhisperer的评论

答案 1 :(得分:0)

首先,文件应命名为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,
]);