【发布时间】:2020-04-10 10:08:20
【问题描述】:
如何让 ci4 实例进入辅助函数? $CI =&get_instance();
【问题讨论】:
标签: php codeigniter
如何让 ci4 实例进入辅助函数? $CI =&get_instance();
【问题讨论】:
标签: php codeigniter
我made对此有所了解。这是一种方法。
帮助文件的内容:即:utility_helper.php
<?php
$CI_INSTANCE = []; # It keeps a ref to global CI instance
function register_ci_instance(\App\Controllers\BaseController &$_ci)
{
global $CI_INSTANCE;
$CI_INSTANCE[0] = &$_ci;
}
function &get_instance(): \App\Controllers\BaseController
{
global $CI_INSTANCE;
return $CI_INSTANCE[0];
}
在基本控制器
的开头调用register_ci_instance($this)
现在你可以在任何你想要的地方使用get_instance(),就像CI3一样:$ci = &get_instance()
我想提三个注意事项
get_instance 时是否需要&。但是,您可以选择使用任何您想要的形式。所以拨打$ci = get_instance() 也可以,但您可以随意拨打$ci = &get_instance()。\App\Controllers\BaseController 更改为适当的内容(即:您的基本控制器)。类型提示非常棒,因为 IDE 可以理解它们。【讨论】:
我明白了(使用 CodeIgniter4):
在控制器中:
helper('login');
$isLog=isLogged($this,"user","passwd");
if($isLog)
....
else
....
在助手中:
use App\Models\Loginmodel as Loginmodel;
function isLogged($ci,$e,$c){
$ci->login = new Loginmodel;
$ci->login->Like('paassword',$c);
$id=$ci->login->select('id')->where('username',$e)->findAll();
return $id;
}
我希望这会有所帮助。
【讨论】:
创建一个通用助手来保存控制器实例。假设这里是common_helper.php
$CI4 = new \App\Controllers\BaseController;
function register_CI4(&$_ci)
{
global $CI4;
$CI4 = $_ci;
}
在你的BaseController
public $user_id;
protected $helpers = ['form', 'url', 'common']; // Loading Helper
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
register_CI4($this); // Registering controller instance for helpers;
$this->user_id = 4;
}
现在您将在所有其他助手中获取控制器实例。假设一个新的 heper user_helper as
function show_user_id()
{
global $CI4;
echo $CI4->user_id; // Showing 4
}
我在PHP Version: 8.0.6测试过
【讨论】: