有没有一种方法可以在控制器中初始化 codeigniter 4 模型变量一次

Is there a way of initializing a codeigniter 4 Model variable once in a Controller

我知道我们可以在构造函数中自动加载或加载模型,并在早期版本的 codeigniter 中通过 class 使用它们,如下所示:

//Declaring the variable

$this->load->model('model_name');

//Using it through the controller

$this->model_name->function();

但是在 codeigniter 4 中,是否有一种更简单的方法可以在 Controller 中定义一次模型变量。目前我知道的做法是:

//Declaring the variable

$model_var = new ModelName();

//Using it through the controller

 ????????

但据我所试,我必须在每个函数中进行初始化。

最简单的方法是为控制器创建一个 属性 来保存模型的实例。

CI v4 依赖初始化函数而不是构造函数来设置属性等。因此,对于简单应用程序中的简单控制器,创建这样的东西将遵循 "best practice"。

<?php
namespace App\Controllers;

/**
 * Class SomeController
 *
 */

use CodeIgniter\Controller;

class SomeController extends Controller
{
    /**
     * @var ModelName instance
     */
     // $modelVar; ```edited - will throw a php syntax error```

     protected $modelVar; ```this works```

    /**
     * Initializer 
     */
    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {

        parent::initController($request, $response, $logger);

        // Load the model
        $this->modelVar = new ModelName();
    }

}

为方便起见,CI 提供 /app/Controllers/BaseController.php 上述示例部分使用的内容。

BaseController 背后的想法是提供一个 class 可用于加载应用程序中每个控制器都需要的资源(classes、助手等)。然后每个控制器将从 BaseController 扩展。上面的示例假设不需要任何其他东西,这在现实生活中是不现实的。因此,如果有需要,上述内容也可以扩展 BaseController