【问题标题】:CodeIgniter fatal error: Call to a member function display_clients() on a non-objectCodeIgniter 致命错误:调用非对象上的成员函数 display_clients()
【发布时间】:2026-01-15 21:25:02
【问题描述】:

我正在编写一个基本上处理数据库的程序,但我在某些功能上遇到了问题,这是它应该做的

public function clist() {
$this->load->model('list_model');
$fields = $this->list_model->listcli();
if ($fields === $this->list_model->listcli()) {
    $fieldl = $fields;
    $this->load->view('clientlist');
    $this->clientlist->display_clients($fieldl);
}

}

这会加载如下所示的模型:

public function listcli()
{
 $this->db->list_fields('clients');
}

}

然后运行模型函数listcli,它会列出客户端数据库中的所有字段并将值放入$fields 然后我将其称为fieldl 并加载一个将显示数据的视图,即视图看起来像这样:

<html>
<body>
<p> sup </p>
<?php

 function display_clients($fieldl)
 {

        ?>
        <html>
            <body>
            <p> sup2 </p>
                <ul>
                <?php
                foreach ($fieldl as $l) {
                ?>
                <li> 
                    <?php echo $l;?>
                </li>
                <?php
                }
    }

然后调用视图内部的函数并将$fieldl的数据传递给它。

但我收到错误“在第 40 行的 /codeigniter/src/application/controllers/clientlist.php 中的非对象上调用成员函数 display_clients()”

第 40 行是

$this->clientlist->display_clients($fieldl);

你能帮忙吗?请和谢谢。

(我知道以前有人问过这类问题,但它们总是针对手头的代码非常具体,所以对我没有帮助,我对 CodeIgniter 真的很陌生,所以如果你能保持任何答案相对简单,我会感激不尽)。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    我需要使用可能的第二个参数将我的数据传递到视图中,而不是我自己的临时解决方案,CI 接受一个对象作为 CI_Loader::view() 的第二个参数

    【讨论】:

      【解决方案2】:

      为什么不能在控制器中准备列表并通过$data数组将其传递给查看?

      $my_list = '<ul>';
      foreach ($fieldl as $l) {
      $my_list .= '<li>'.$l.'</li>';
      }
      $my_list .= '</ul>';
      
      $data['my_list'] = $my_list;
      

      然后您可以以$my_list 的身份访问它。只需在需要的地方回显即可。

      编辑: 根据您自己的回答,是的 - 完全正确。使用上面的示例,您将传递 $data 作为第二个参数查看:

      $this->load->view('my_view',$data);
      

      然后在视图中,您以$my_list 的形式访问$data['my_list'],以$foo 的形式访问$data['foo'] 等等。

      【讨论】:

      • 你不能只在视图中回显变量,它们必须被加载,我已经解决了,不用担心。
      • 见我上面的编辑。我认为我的例子已经很清楚了,抱歉。
      最近更新 更多