codeigniter -> возникают проблемы при загрузке нескольких библиотек / классов - PullRequest
0 голосов
/ 20 декабря 2010

Хорошо, поэтому в моем базовом контроллере (page.php) у меня есть следующий код, который отлично работает:

   $this->load->library('Siteclass');
   $mysite = new site_model();

Библиотека siteclass ссылается на модель с именем site_model и создает экземпляры на основе данных, полученных из этой модели.,Все хорошо.

Теперь я хочу загрузить другую библиотеку, чтобы я мог создать экземпляр другого объекта.Поэтому я добавляю это в page.php:

 $this->load->library('Memberclass');
 $mysite = new member_model();

Но теперь я получаю следующую ошибку:

 Message: Undefined property: Memberclass::$site_model
 Filename: libraries/Loader.php
 Line Number: 1035

Из того, что я могу сказать, кажется, что класс загрузчика, когдаприменяется к Memberclass, так или иначе все еще ссылается на site_model вместо member_model.Я проверил свой код и определенно вызываю правильные файлы.

Вот как выглядит Siteclass.php:

 if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

 class Siteclass extends Controller {
    function __construct() {
        parent::Controller();
        $this->load->model('Site_model');
        $data = $this->Site_model->load_site_data();
        // etc etc

, а вот как выглядит Memberclass.php:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Memberclass extends Controller {
function __construct() {
        parent::Controller();
    $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        // etc etc

Заранее благодарим за любую помощь!

Гари

1 Ответ

2 голосов
/ 20 декабря 2010

Я думаю, вы не понимаете, как MVC работает в CodeIgniter.Почему вы используете класс загрузчика для создания контроллера?Почему вы создаете автономный экземпляр вашей модели вне класса контроллера?

В CodeIgniter ваши URL-адреса представляют пути к методам ваших контроллеров.Это означает, что ваш «базовый контроллер» должен быть автоматически создан, если вы перейдете на:у вас есть такая ссылка:

www.example.com / page

В вашем каталоге /application/controllers должен быть файл с именем page.php, который выглядит следующим образом:это:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Page extends Controller {
    function __construct() {
        parent::Controller();
        // etc etc

Кроме того, если вы не загружаете данные из вашей модели для использования каждый раз, когда вызываете этот контроллер , вы захотите поместить вызовы вашей модели внеконструктивный метод этого класса.Что-то вроде:

class Page extends Controller {
    function __construct() {
        parent::Controller();
    }

    function index() {
        $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        $this->load->view('myview', array('data'=>$data));
    }
}

Опять же ... не совсем уверен, в каком контексте вы все это делаете, но кажется, что вы не стоите твердо в рамках.В принципе нет причин, по которым вам следует использовать класс загрузчика для загрузки контроллеров, и, кроме того, нет причин, по которым вам следует создавать автономные экземпляры классов моделей с использованием ключевого слова PHP new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...