我了解我们可以在构造函数中自动加载或加载模型,并通过早期版本的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
????????
但就我尝试查找的地方而言,我必须在每个函数中进行初始化。
答案 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
。