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

How to work with subdirectory controllers in CodeIgniter 4?

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

我只是出于某种原因无法让它工作。

这是 URL 例如:www.example.com/admin/dashboard

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

的文件

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

namespace App\Controllers;

class Dashboard extends BaseController
{
    public function index()
    {

    }
}

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

Controller or its method is not found: App\Controllers\Admin\Dashboard::index

我知道文件本身已成功加载,但我想我没有正确声明 class 名称,它一直向我抛出那些 404 错误。

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


更新 #1

我设法通过改变一些东西让它工作:

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

class Dashboard extends Controller
{
    public function index()
    {

    }
}

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

关于如何扩展它的任何想法 BaseController

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

和我想象的一样,问题是我没有学习命名空间。 我需要将 use 行指向 BaseController 位置。

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

class Dashboard extends BaseController
{
    public function index()
    {

    }
}

现在 www.example.com/admin/dashboard/ 直接进入该索引函数,如预期的那样。

php spark make:controller /Subfolder/ControllerName
$routes->add('/(.+?)_(.+?)/(.+?)$', 'subdir\\_::');
$routes->add('/(.+?)_(.+?)$', 'subdir\\_::index');

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