【问题标题】:Code Igniter Tutorial ErrorCodeigniter 教程错误
【发布时间】:2012-12-23 10:16:55
【问题描述】:

当我尝试编写和运行 Code Igniter 教程时,它会抛出这个错误:

Call to undefined method News_model::get_news() in application\controllers\news.php on line 21 

这是第 21 行

$data['news'] = $this->news_model->get_news($slug);

mews 模型

<?php
class News_model extends CI_Model {
    public function __construct()
    {
        $this->load->database();
    }
    public function get_news($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query = $this ->db->get('news')
            return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
    }
    }

【问题讨论】:

  • 你在 News_model 上定义了 get_news 方法了吗?是公开的吗?
  • 发布news_model。没有它,我们将在黑暗中拍摄
  • 一旦你调用了$this-&gt;load-&gt;model('news_model'),它就在单例中。在其中定义的任何公共方法都是可用的。我们确实需要查看您的模型,或者至少它的构造函数(如果它有一个)和方法的定义。

标签: php codeigniter controller


【解决方案1】:

如果您在控制器中使用您的模型 - 您必须编写此代码

$this->load->model('News_model');
$data['news'] = $this->News_model->get_news($slug);

并检查线

parent::__construct();

在您的控制器 __construct 方法中。 (如果子定义了构造函数,PHP不会自动实例化父构造函数,除非子专门实例化父构造函数)

如果您在应用程序的另一端使用模型,则必须编写此代码

$CI = &get_instance();
$CI->load->model('News_model');
$data['news'] = $CI->News_model->get_news($slug);

【讨论】:

  • 可能值得解释的是,如果子级定义了构造函数,PHP 不会自动实例化父级构造函数,除非子级专门实例化父级的构造函数(例如,除了 'what' 之外的 'why' )。
【解决方案2】:

如果不发布更多代码,这里似乎有两件事要检查。

首先,您必须在模型中调用父构造函数。所以你的 News_model 构造函数应该是这样的:

function __construct()
{
  parent::__construct();
  $this->load->database();
}

其次,如果您在上面发布的第 21 行的代码是正确的,则模型名称必须与您的类名称匹配。所以第 21 行应该是:

$data['news'] = $this->News_model->get_news($slug);

注意 News_model 中的大写“N”。

这是 yAnTar 所写但措辞不同的基本内容。希望你能理解其中任何一个。

【讨论】:

    【解决方案3】:

    希望对你有帮助

    1.In your controller:-
    
        parent::__construct();
        $this->load->model('News_model ');
        $data['news'] = $this->news_model->get_news($slug);
    
     2.In Model:-
    class News_model extends CI_Model {
    public function __construct()
    {
        $this->load->database();
    }
    public function get_news($slug)
    {
        if ($slug)
        {
            $query = $this ->db->get('news')
            return $query->result_array();
        }
    
        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
    }
    }
    

    【讨论】:

      【解决方案4】:

      似乎没有加载模型。 您必须在使用之前加载模型 在控制器或自动加载数组中 在控制器负载模型中使用

      $this->load->model('model_name');
      

      在你的情况下

      $this->load->model('news_model');
      

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 2013-01-17
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多