升级控制器
文档
已更改内容
由于已将命名空间添加到 CodeIgniter 4,因此必须更改控制器以支持命名空间。
CI4 控制器构造函数不会自动将核心类加载到属性中。
CI4 的控制器有一个特殊构造函数 initController()。
如果您想要一个基础控制器(在 CI3 中为
MY_Controller
),请使用 app/Controllers/BaseController.php。在控制器中调用
echo
(如在 CI3 中)仍然受支持,但建议从控制器返回字符串或响应对象。
升级指南
首先,将所有控制器文件移动到文件夹 app/Controllers。
在 PHP 开始标签后添加此行:
namespace App\Controllers;
将
extends CI_Controller
替换为extends BaseController
。如果存在,请删除行
defined('BASEPATH') OR exit('No direct script access allowed');
。
如果您在控制器结构中使用子目录,则必须根据该结构更改命名空间。
例如,您有一个位于 application/controllers/users/auth/Register.php 中的版本 3 控制器,则命名空间必须为
namespace App\Controllers\Users\Auth;
,并且版本 4 中的控制器路径应如下所示:app/Controllers/Users/Auth/Register.php。确保子目录的首字母大写。之后,您必须在命名空间定义下方插入一个
use
语句,以便扩展 BaseController
:use App\Controllers\BaseController;
代码示例
CodeIgniter 版本 3.x
路径:application/controllers
<?php
class Helloworld extends CI_Controller
{
public function index($name)
{
echo 'Hello ' . html_escape($name) . '!';
}
}
CodeIgniter 版本 4.x
路径:app/Controllers
<?php
namespace App\Controllers;
class Helloworld extends BaseController
{
public function index($name)
{
return 'Hello ' . esc($name) . '!';
}
}