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 的评论
我在插件文件夹中创建了名称为 "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 的评论