php - Codeigniter 4 - 无法让我的模块工作
问题描述
我试图让一个简单的模块工作。它所做的只是将“测试”回显到网页,但我无法让它工作。
我做的第一件事是将模块添加到 app/Config/Autoload.php 如下;
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Modules\Filemanager' => ROOTPATH . 'modules'
];
然后,我创建了以下目录结构;
在 Modules/Filemanager/Config/Routes.php 我添加了以下路线;
<?php
$routes->add('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');
最后,在 Modules/Filemanager/Controllers/Filemanager 我有以下方法:
<?php
namespace Modules\Filemanager\Controllers;
use App\Controllers\BaseController;
class Filemanager extends \App\Controllers\BaseController
{
public function index(){
echo 'test'; die();
}
}
当我进入浏览器并输入 example.com/filemanager/index 时,出现以下错误;
Controller or its method is not found: \App\Controllers\Filemanager::index
任何想法将不胜感激。
解决方案
你在这里做错了几件事。
在 App/Config/Autoload.php 中,你已经写
'Modules\Filemanager' => ROOTPATH . 'modules'
了 但是在你的目录结构图中,没有名为“modules”的目录
请将“Modules”文件夹名称更改为“modules”更改
'Modules\Filemanager' => ROOTPATH 。'modules'
到
'Modules' => ROOTPATH 。
App/Config/Autoload.php 中的“模块”在 Modules/Filemanager/Config/Routes.php 您在下面的行中使用 $routes 变量
$routes->add('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');
但是 $routes 没有在文件中的任何地方定义。放if(!isset($routes)) { $routes = App\Config\Services::routes(true); } $routes->get('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');
它应该是 $routes->get() 而不是 $routes->add()
在您将这些路由添加到 App\Config\Routes.php 文件中之前,模块级路由将不起作用。将您的模块路由添加到 app\Config\Routes.php
foreach(glob(ROOTPATH . 'modules/*', GLOB_ONLYDIR) as $item_dir) {
if(file_exists($item_dir . '/Config/Routes.php')) {
require_once($item_dir . '/Config/Routes.php');
}
}
在这些更改之后,您的代码应该可以工作。
推荐阅读
- javascript - Hooks 映射数组问题
- php - 如何从其他控件调用 elementor 中继器标头?
- google-chrome - 在 Chrome 中使用 cookie 为自己的应用程序发出跨域请求的最佳方法
- python - 如何找到数组中每4个元素的总和
- ckeditor - 关于CKEditor4插件“表格工具”的问题
- sql - 如何使用 SQL 查找顺序合约的 1 个月重叠?
- kubernetes - Prometheus - 监控容器中的命令输出
- networking - 分区的 pcap 文件
- firebase - 前台推送通知
- css - 使用 .png 和 webp 的 Sprite