$this->load 不适用于 Codeigniter 4

$this->load does not work on Codeigniter 4

如果我使用 $this->load->view(... 我会出错,但如果我使用 echo view(... 错误是:在 null

上调用成员函数 view()

如果我尝试使用 $this->load->model(...

加载模型,我会遇到同样的错误

使用echo view('')直接输出到浏览器 如果你想获得一个视图,例如通过 ajax 发送,请使用 return view('')

这是CI4的新增内容,没有了$this->load->view('')

请注意,如果执行的最后一行是 return view(''),它仍然会传递给浏览器。

所有这些都适用于模型和库。现在它更面向对象而不是拥有超级对象。

例如,如果您有一个位于 App/Models 下的模型,在控制器中或您想要加载它的地方包括名称空间,即 use App\Models\MyModel 在开头,然后在您要使用的方法中只需创建一个新的 class 即

$myModel = new MyModel();

如果您想要库助手的实例,例如您模型中的数据库,请为您的模型执行此构造函数:

protected mixed $db;
public function __construct(ConnectionInterface &$db)
{
    $this->db = &$db;
}

在基础控制器initController方法中put

$this->db = \Config\Database::connect();

现在,当您从扩展 BaseController 的控制器创建模型实例时,传递数据库实例:

$myModel = new MyModel($this->db);

请注意,CI4 中的 $this 不是指超级对象,而是指控制器实例,即您在 initController 中加载的任何内容都可以在 $this 中找到。 CI4 现在默认加载了几个助手和库,例如 $this->request->getPost('')

请阅读文档CI4 Documentation,尤其是如果您习惯了 CI3