CodeIgniter 4中如何访问子目录的控制器?
开发学院2022-04-06 08:46:43
我想要在CodeIgniter 4中访问子目录中的控制器,但是出于某种原因,我无法让它工作。
例如,这是一个URL:www.example.com/admin/dashboard
在控制器文件夹中,我创建了一个名为Admin的文件夹和一个名为Dashboard.php的文件。
我在Dashboard.php中使用了这段代码:
namespace App\Controllers; class Dashboard extends BaseController { public function index() { } }
我试着把类名改成AdminDashboard,Admin_Dashboard,几乎是每个逻辑名,但是每次我都得到一个404错误,提示如下:
Controller or its method is not found: App\Controllers\Admin\Dashboard::index
我知道文件本身已经成功加载,但是我认为我没有正确声明类名,它一直向我抛出那些404错误。
不幸的是,CI4的文档没有提供任何关于类名应该如何命名的信息...
更新#1
我设法通过改变一些事情来使它工作:
namespace App\Controllers\Admin; use CodeIgniter\Controller; class Dashboard extends Controller { public function index() { } }
但现在它不会扩展BaseController,它有一些我为我的应用程序构建的核心功能。
有什么想法可以让它扩展BaseController吗?
我必须承认,我还没有太多关于命名空间的知识,所以这可能是我犯错误的原因。
解决方案
正如我想象的那样,问题是我没有学会命名空间。我需要将使用线指向BaseController位置。
namespace App\Controllers\Admin; use App\Controllers\BaseController; class Dashboard extends BaseController { public function index() { } }
现在,www.example.com/admin/dashboard/像预期的那样,直接使用了那个指数函数。
其他方案
可能需要在Router.php中增加如下映射
$routes->add('/(.+?)_(.+?)/(.+?)$', 'subdir\\\\$1_$2::$3'); $routes->add('/(.+?)_(.+?)$', 'subdir\\\\$1_$2::index');
相关文章
- UE5敌人直接放置场景ok,代码生成不执行AI
- UE5中开发HD-2D游戏的优化设置与2D角色导入技巧
- nginxSpringboot项目常见配置
- 在MacOS上部署ComfyUI的指南
- 解决UE5开发Topdown2D动作游戏的旋转问题
- UE5开发2D游戏设置排序的步骤.
- 大幅提升FPS!Unreal Engine 5 最佳 2D 设置
- Aseprite在线编译教程
- 探索Nexa AI:开源边缘智能的新纪元
- Springboot项目允许根目录txt文件被访问
- lnmp一键安装包多php环境安装
- Python虚拟环境整合包制作:一键打包与运行指南
- aws云服务器使用root登录
- nginx配置允许跨域
- nginx配置springboot反向代理,同时允许上传路径可以直接被访问
- CentOS8更换国内安装源
- 在Linux中使用FFmpeg修剪视频
- uniapp项目(app,小程序)html内容图片尺寸超出屏幕修复
- uniapp启用微信小程序按需注入
- mysql 批量替换指定字符