首页 > 解决方案 > 为什么我在从控制器调用库函数时在 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') ?>';
});

标签: phpcodeigniter

解决方案


过去我在使用以大写字母开头的库时遇到了一些问题。更改为小写(文件名 + 在控制器中加载库的方式),看看会发生什么。


推荐阅读