[英]Codeigniter 4 - get instance in helper function
我怎样才能将 ci4 实例放入助手 function? $CI =&get_instance(); <- 那是在版本 3 中,这个 go 在版本 Codeigniter 4 中如何?
我为此做了一个要点。 这是一种方法。
帮助文件内容:即: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];
}
在你的基础 controller的最开始调用register_ci_instance($this)
现在你可以像 CI3 一样在任何你想要的地方使用get_instance()
: $ci = &get_instance()
我想提三个注意事项
get_instance
时是否需要&
。 但是,您可以选择使用任何您想要的形式。 所以调用$ci = get_instance()
也可以,但你可以根据需要调用 $ $ci = &get_instance()
。\App\Controllers\BaseController
为适当的内容(即:您的基础 controller )。 类型提示很棒,因为 IDE 可以理解它们。我明白了(使用 CodeIgniter4):
在controller中:
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;
}
我希望这有帮助。
创建一个通用助手来保留 controller 实例。 假设这里是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;
}
现在您将在所有其他助手中获得 controller 实例。 假设一个新的 heper user_helper
为
function show_user_id()
{
global $CI4;
echo $CI4->user_id; // Showing 4
}
我在PHP Version: 8.0.6
对我来说,这对我来说是最好的解决方案:
if (!function_exists('getSegment'))
{
/**
* Returns segment value for given segment number or false.
*
* @param int $number The segment number for which we want to return the value of
*
* @return string|false
*/
function getSegment(int $number)
{
$request = \Config\Services::request();
if ($request->uri->getTotalSegments() >= $number && $request->uri->getSegment($number))
{
return $request->uri->getSegment($number);
}
else
{
return false;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.