有没有一种方法可以在控制器中初始化 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
。
我知道我们可以在构造函数中自动加载或加载模型,并在早期版本的 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
。