有没有一种方法可以在Controller中初始化一次codeigniter 4 Model变量

时间:2020-05-23 15:52:32

标签: codeigniter model-view-controller model controller codeigniter-4

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

//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

 ????????

但就我尝试查找的地方而言,我必须在每个函数中进行初始化。

1 个答案:

答案 0 :(得分:1)

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

CI v4依靠初始化函数而不是构造函数来设置属性等。因此,在一个简单的应用程序中创建一个类似的控件,将遵循“最佳实践”。

<?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背后的想法是提供一个类,该类可用于加载应用程序中每个控制器所需的资源(类,助手等)。然后,每个控制器将从BaseController扩展。上面的示例假定不需要其他任何东西,这在现实生活中是不现实的。因此,如果需要,上述内容也可以扩展BaseController