php - 为什么我在从控制器调用库函数时在 CodeIgniter 中收到“调用 null 时的成员函数”错误?
问题描述
我正在尝试从控制器调用库函数,但出现错误
例外:在 null /usr/local/www/public_html/pos_clcdesq/application/controllers/Config.php 1022 上调用成员函数 items_upload()
我认为这个错误通常意味着控制器无权访问库函数,但正如您从我的构造函数中看到的那样,我加载了库。我在这里想念什么?
控制器构造函数:
public function __construct()
{
parent::__construct('config');
$this->load->library('barcode_lib');
$this->load->library('sale_lib');
$this->load->library('Clcdesq_integration_lib');
}
控制器 initial_items_upload 函数:
public function initial_items_upload()
{
$this->Clcdesq_integration_lib->items_upload();
}
库构造函数和 items_upload 函数:
class Clcdesq_integration_lib
{
private $CI;
private $api_key;
private $api_url;
/**
* Constructor
*/
public function __construct($api_key = '')
{
$this->CI =& get_instance();
$this->api_key = $this->CI->encryption->decrypt($this->CI->Appconfig->get('clcdesq_api_key'));
$this->api_url = $this->CI->encryption->decrypt($this->CI->Appconfig->get('clcdesq_api_url'));
}
public function items_upload()
{
$all_items = json_decode(json_encode($this->CI->Item->get_all(), JSON_UNESCAPED_UNICODE), true);
foreach($all_items as $item)
{
$item_data[] = json_decode(json_encode($this->CI->Item->get_info($item['item_id']), JSON_UNESCAPED_UNICODE), true);
}
$pushdata = $this->populate_api_data($item_data);
if (version_compare(phpversion(), '7.1', '>='))
{
ini_set( 'precision', 17 );
ini_set( 'serialize_precision', -1 );
}
$json = json_encode($pushdata, JSON_UNESCAPED_UNICODE);
$clcdesq_guid = $this->send_data($this->api_url, $this->api_key, $json);
log_message("ERROR", "New Product JSON Results: $json");
log_message("ERROR", "API Results: $clcdesq_guid");
}
我正在从视图中调用该函数:
<div class="form-group form-group-sm">
<?php echo form_label($this->lang->line('config_clcdesq_utilities'), 'config_clcdesq_items_upload', array('class' => 'control-label col-xs-2')); ?>
<div class='col-xs-2'>
<div id="items_upload" class="btn btn-default btn-sm">
<span style="top:22%;"><?php echo $this->lang->line('config_clcdesq_items_upload'); ?></span>
</div>
</div>
</div>
$("#items_upload").click(function() {
window.location='<?php echo site_url('config/initial_items_upload') ?>';
});
解决方案
过去我在使用以大写字母开头的库时遇到了一些问题。更改为小写(文件名 + 在控制器中加载库的方式),看看会发生什么。
推荐阅读
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 的字节 0xfc:无效的起始字节
- c++ - 如何从 C++ 类中的排序调用比较器函数
- amazon-web-services - 无法连接到已部署的容器
- c - 我不明白为什么这段代码似乎在缓冲,而我正在使用无缓冲的 I/O
- scala - Scala:every.joinRight 的类型推断问题
- c - 为什么在增加的内存位置中没有连续定义的变量?
- powershell - 为什么我的 powershell 命令在我的批处理文件中不起作用?
- android - android绑定数据的通用形式
- swift - 你如何垂直居中 SwiftUI tabItem
- django - 可以使用 django rest 框架来构建 APK 吗?