2012-12-23 75 views
1

當我嘗試編寫和運行代碼點火器教程,它拋出這個錯誤:代碼點火器教程錯誤

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

的馬廄模型

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

是否定義上News_model的get_news方法?它是公開的嗎? – meouw

+1

發佈'news_model'。沒有它,我們在黑暗中拍攝 – cjds

+0

一旦你調用'$ this-> load-> model('news_model')',它就在單身中。其中定義的任何公共方法都可用。我們確實需要看看你的模型,或者在它的構造函數中,如果它有一個和方法的定義。 –

回答

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); 
+0

值得說明的是,如果孩子定義了構造函數,PHP不會自動實例化父構造函數,除非孩子明確地實例化父項的構造函數(例如除'what'之外的'爲什麼')。 –

+0

+1您也可以將自動加載新聞模式。 – Shomz

0

沒有發佈更多的代碼,它看起來像有兩件事要檢查這裏。

首先,您必須調用模型中的父構造函數。所以,你的News_model構造函數應該是這樣的:

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

其次,如果行21你在上面發佈的代碼是正確的,型號名稱必須與您的類名。因此,行21應改爲:

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

注意大寫的 '否' News_model。

這是yAnTar寫的,但措辭不同。希望你能理解他們中的任何一個。

2

可能,這將幫助你

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