如何在 CodeIgniter 4 中使用子目录控制器?

Posted

技术标签:

【中文标题】如何在 CodeIgniter 4 中使用子目录控制器?【英文标题】:How to work with subdirectory controllers in CodeIgniter 4? 【发布时间】:2020-07-22 18:53:03 【问题描述】:

我需要在 CodeIgniter 4 中使用子目录控制器的帮助。

由于某种原因,我无法让它工作。

这是网址,例如:www.example.com/admin/dashboard

在控制器文件夹中,我创建了一个名为Admin 的文件夹和一个名为Dashboard.php 的文件。

我在Dashboard.php中使用了这段代码:

namespace App\Controllers;

class Dashboard extends BaseController

    public function index()
    

    

我尝试将类名更改为AdminDashboardAdmin_Dashboard,几乎每个逻辑名称,但每次我收到 404 错误时,都会说:

找不到控制器或其方法: App\Controllers\Admin\Dashboard::index

我知道文件本身已成功加载,但我认为我没有正确声明类名并且它不断向我抛出那些 404 错误。

不幸的是,CI4 的文档没有提供任何关于类名应该叫什么的信息......


更新 #1

我设法通过改变一些事情使它工作:

namespace App\Controllers\Admin;
use CodeIgniter\Controller;

class Dashboard extends Controller

    public function index()
    

    

但现在它不会扩展 BaseController,它有一些我为我的应用程序构建的核心功能。

关于如何使其扩展 BaseController 的任何想法?

我必须承认我对命名空间的了解还不是很多,所以这可能是我犯错误的原因。

【问题讨论】:

【参考方案1】:

正如我想象的那样,问题在于我没有学习命名空间。 我需要将use 线指向 BaseController 位置。

namespace App\Controllers\Admin;
use App\Controllers\BaseController;

class Dashboard extends BaseController

    public function index()
    

    

现在www.example.com/admin/dashboard/ 按预期直接进入该索引函数。

【讨论】:

有了这些知识,您就可以实现类似 HMVC 的结构和任何您喜欢的东西。 你是如何绘制路线图的? 还有一件事是你不应该在控制器文件夹中有一个名为 Admin 的控制器,否则它不会工作,或者你可以使用路由来解决这个问题【参考方案2】:
php spark make:controller /Subfolder/ControllerName

【讨论】:

欢迎来到 Stack Overflow!欢迎来到 ***。虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将提高​​答案的长期价值。【参考方案3】:
$routes->add('/(.+?)_(.+?)/(.+?)$', 'subdir\\\\$1_$2::$3');
$routes->add('/(.+?)_(.+?)$', 'subdir\\\\$1_$2::index');

我能够使用此设置进行映射。

【讨论】:

以上是关于如何在 CodeIgniter 4 中使用子目录控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ajax (codeigniter) 在我的编辑表单中获取和显示选定值到 <select2> 标记中

如何使用codeigniter 4框架在mysql数据库中插入多行?

Codeigniter 4 如何在视图中调用控制器方法?

如何在 CodeIgniter 4 中保存到数据库后获取插入 ID

如何在 Codeigniter 4 中扩展控制器?

如何在codeigniter 4中显示上传的图像