代码点火器教程错误

时间:2012-12-23 10:16:56

标签: php codeigniter controller

当我尝试编写并运行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 model

<?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();
    }
    }

4 个答案:

答案 0 :(得分:3)

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

$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);

答案 1 :(得分:0)

如果不发布更多代码,看起来有两件事要检查。

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

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

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

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

注意大写&#39; N&#39;在News_model中。

这是yAnTar写的,但措辞不同。希望你能理解其中任何一个。

答案 2 :(得分:0)

这可能会对你有所帮助

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();
}
}

答案 3 :(得分:0)

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

的控制器负载模型中
$this->load->model('model_name');

在你的情况下

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