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