ci4中默认控制器需用$routes->setdefaultcontroller()设置,如'home'或'admin\dashboard',类须首字母大写、继承codeignitercontroller、含public index()方法。

CodeIgniter 3 的 $route['default_controller'] = 'home'; 这类写法,在 CI4 中**完全不适用**——不是语法微调,而是整套机制已重构。
CI4 默认控制器配置位置变了
CI4 不再使用 application/config/routes.php 数组方式,而是改用面向对象的路由类:
- 配置文件路径是
app/Config/Routes.php - 默认控制器由
$routes->setDefaultController()方法设定 - 必须配合命名空间和类名(首字母大写),不能只写字符串
具体怎么写
打开 app/Config/Routes.php,在 if (ENVIRONMENT !== 'production') 块之外或之内(推荐放在 $routes->get('/', ...) 附近),添加:
$routes->setDefaultController('Home');
这表示:当访问根路径 / 时,自动调用 AppControllersHome::index() 方法。
注意两点:
-
控制器类名必须首字母大写,且文件路径为
app/Controllers/Home.php -
该类中必须有
index()方法,否则仍会 404
如果原来 CI3 的默认控制器在子目录里
比如 CI3 写的是 $route['default_controller'] = 'admin/dashboard';,CI4 不能直接照搬。你需要:
- 把控制器移到
app/Controllers/Admin/Dashboard.php - 确保类定义含完整命名空间:
namespace AppControllersAdmin; - 在 Routes.php 中写:
$routes->setDefaultController('AdminDashboard');
别忘了检查控制器本身
CI4 要求控制器继承 CodeIgniterController,且方法需为 public:
<?php namespace AppControllers;
use CodeIgniterController;
class Home extends Controller
{
public function index()
{
return view('welcome_message');
}
}











