php - Codeigniter 4 - 在辅助函数中获取实例
问题描述
我怎样才能让 ci4 实例进入辅助函数?$CI =&get_instance(); <- 那是在版本 3 中,这在 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];
}
在您的基本控制器
register_ci_instance($this)
的最开始调用现在你可以
get_instance()
像 CI3 一样在任何你想要的地方使用:$ci = &get_instance()
我想提三个注意事项
- 我只在PHP8上测试过。
- 我不确定
&
调用时是否需要get_instance
。但是,您可以选择使用任何您想要的形式。所以打电话$ci = get_instance()
也可以,但你可以$ci = &get_instance()
随心所欲。 - 确保您更改
\App\Controllers\BaseController
为适当的内容(即:您的基本控制器)。类型提示很棒,因为 IDE 可以理解它们。
推荐阅读
- printf - bash:如何总结读取命令中的间隔数?
- c# - 合并历史表记录asp.net mvc
- c# - FileSystemWatcher 监控 2 个目录。更改日志每次更改增加 1,所以当控制台中的一个文件更改时,它会弹出多次?
- firebase - 身份验证屏幕未按预期工作后显示主屏幕的条件
- ruby-on-rails - 访问散列中的值
- git - 带有额外支持分支的 Gitflow
- python - 使用 requests 和 BeautifulSoup 获取 Youtube 视频标题有时会出错,有时会起作用(Python)
- vespa - 我们可以在 vespa.ai 中做出多少个最大搜索定义?
- asp.net-core - 如何从 url 中删除或隐藏端口号?
- python - PyQt widget refresh behavior different when clicking button with mouse or keyboard