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');
相关文章
- nginx配置允许跨域
- nginx配置springboot反向代理,同时允许上传路径可以直接被访问
- CentOS8更换国内安装源
- 在Linux中使用FFmpeg修剪视频
- uniapp项目(app,小程序)html内容图片尺寸超出屏幕修复
- uniapp启用微信小程序按需注入
- mysql 批量替换指定字符
- 使用stable diffution生成艺术二维码
- JQuery 删除节点下子元素中的最后一个元素
- Windows 11启动菜单的隐藏更改
- 出自清华的强大中文AI模型ChatGLM2-6B
- php根据ip判断所属国家(使用Geo库)
- 使用acme.sh自动化部署ssl证书
- C#压缩pdf文件的代码示例
- 功能强大的免费AI绘画工具:Stable Diffusion
- ChatGPT的中文平替:ChatGLM-6B
- 科普:为什么人工智能需要GPU而不是CPU?
- iis10安装URLRwrite组件
- 记一次cc攻击处理过程
- CodeIgniter4设置session变量为公共变量