2014-08-15 2 views
2

Я только начал изучать CodeIgniter. У меня есть некоторый опыт работы на PHP, но не в ООП. Так что я скачал CI с их сайта и начал следовать инструкции, но я столкнулся с некоторыми проблемами, как этотМетод Codeigniter не найден в классе

Сообщение: Не определено свойство: News_model :: $ нагрузки

Имя файла: модели/news_model. PHP

Номер строки: 7

На этой линии является __construct() функция

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

Кроме того, в следующей функции db field not found in class 'News model' и method 'result_array' not found in class...

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

Я знаю, что это очень простой, но я немного потерял сейчас. Я буду рад, если кто-нибудь сможет объяснить или хотя бы указать мне на другой хороший учебник, который я могу узнать. Вот полный class News_model

class News_model extends CI_Controller { 

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

Модели должны расширить класс CI_Model.

class News_model extends CI_Model { /* ... */ } 

Однако использование контроллеров необходимо вызвать __construct метод CI_Controller класса, когда вы переопределить __construct метод:

class News extends CI_Controller { 

    public function __construct() 
    { 
     // Call CI_Controller construct method first. 
     parent::__construct(); 

     $this->load->database(); 
    } 
} 

Поскольку вы переопределение метода __construct() в классе наследодателя, вы должны сначала вызвать родительский конструктор.

В противном случае, когда контроллер инициализируется, вы потеряете Loader and Core класс, а $this->load никогда не будет работать.

+0

Да, работает вот так. Также, когда я пишу 'CI_Model' .. не' CI_Controler' .. явно это моя ошибка. – slsv

+0

@slsv Должен ли я удалить ответ? Я смущен :) –

+0

Я думаю, это нормально. Это хорошо для меня, потому что я узнаю что-то новое. Мат будет полезно и для кого-то другого. – slsv

3

извините, но:

class News_model extends CI_Controller {...} 

???

+0

А, моя ошибка и да в руководстве - 'CI_Model' .. не' CI_Controler' – slsv

3

Да, пользователь2883814 прав, каждая модель в CodeIgniter должна расширять только класс CI_Model. Так оно и должно выглядеть следующим образом:

class News_model extends CI_Model 

Затем вы должны загрузить вашу модель на контроллер для использования.

Кстати, модели часто не используются в CodeIgniter, и вместо этого вы можете использовать только контроллеры и представления.

+0

Спасибо за повтор. Теперь я увидел свою ошибку. – slsv

Смежные вопросы