用 php spark serve 启动内置服务器后访问 http://localhost:8080/home 可直接验证路由是否注册及控制器是否可实例化;若 404 则问题在路由定义或控制器文件/类名,而非 web 服务器配置。

在命令行中验证 CodeIgniter 路由是否生效,避免反复刷新浏览器、排除 Web 服务器重写干扰,直接确认路由解析逻辑本身是否正确。
用 php spark serve 启动内置服务器后测试
打开终端,进入项目根目录(含 spark 文件的同级目录),执行:
php spark serve
服务启动后,访问 http://localhost:8080/home —— 若页面返回内容,说明路由已注册且控制器可实例化;若报 404,则问题出在路由定义或控制器文件/类名上,而非 Apache/Nginx 配置。
这一步绕过了 .htaccess 和 Web 服务器模块,专测框架层路由匹配能力。
用 php spark routes 查看全部已注册路由
运行命令:
php spark routes
终端将列出所有有效路由条目,包括 URI 模式、HTTP 方法、目标控制器方法及命名空间。重点检查:
• 是否出现你手动添加的路由(如 /home → Home::index);
• URI 模式是否带多余斜杠(如 /home/ 与 /home 视为不同条目);
• 控制器类名是否显示为 App\Controllers\Home(CI4 要求完整命名空间)——【若显示为 Home 或 App\Home,说明 namespace 缺失或错误】。
用 php spark test 模拟 HTTP 请求验证路由行为
第一步:确保已安装测试支持(composer require --dev codeigniter4/framework 若未启用测试模块);
第二步:创建测试文件 app/Tests/RouterTest.php,内容如下:
<?php <br>namespace Tests;<br>use CodeIgniter\Test\TestCase;<br>class RouterTest extends TestCase<br>{<br> public function testHomeRouteResolvesToHomeController()<br> {<br> $routes = service('routes');<br> $this->assertTrue($routes->hasNamedRoute('home')); // 若你给路由加了名字<br> $this->assertEquals('Home::index', $routes->getRoutes()['GET']['/home'][0]['handler']);<br> }<br>}
第三步:运行测试:
php spark test --filter RouterTest
测试通过即证明该路由在框架内部被准确识别和注册;失败则需回查 app/Config/Routes.php 中的书写格式与大小写。
用 curl 直接请求 index.php 入口(绕过重写)
方法一:GET 请求测试
curl "http://localhost/index.php/home"
方法二:POST 请求测试(需配合路由声明)
curl -X POST "http://localhost/index.php/contact" -d "name=test"
只要返回非 404 页面内容(哪怕只是空白或 PHP 错误),就说明请求已抵达框架并触发了路由解析——【此法能明确区分是路由问题还是重写问题】。
若仍 404,请立即检查:app/Controllers/Home.php 文件是否存在、类名是否为 Home、是否继承 BaseController、是否声明了 public function index()。










