получить ошибку в codeigniter - PullRequest
3 голосов
/ 12 июля 2011

Я загружаю библиотеку с именем 'render' в мое приложение codeigniter.полный код библиотеки:

class Render extends CI_Controller {
    public function template($template, $view, $extra_css, $extra_js) {
        $data = array();
        if (isset($view)) {
            $data['view'] = $view;
        }
        if (isset($extra_css)) {
            $data['extra_css'] = $extra_css;
        }
        if (isset($extra_js)) {
            $data['extra_js'] = $extra_js;
        }
        $template = $this->load->view("templates/$template", $data, TRUE);
        echo $template;
    }

}

эта библиотека работает нормально, но проблема в том, что всякий раз, когда я загружаю эту библиотеку вручную или редактирую файл автозагрузки, я получаю сообщение об ошибке при загрузке любой модели в любой измой контроллер.

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Home::$my_model_name

Filename: controllers/home.php

Line Number: 11

здесь строки с номерами 10 и 11:

$this->load->model('my_model_name');
$this->my_model_name->my_model_method();

, и я также попытался использовать:

$this->load->model('my_model_name', 'My_model');
$this->My_model->my_model_method();

Мой контроллер "home"код:

class Home extends CI_Controller {
    function __construct() {
        parent::__construct();
    }
    public function index()
    {
        $this->load->model('my_model_name');
        $this->my_model_name->index();
    }
}

Я пытался добавить метод __construct () в мою библиотеку, но все равно не повезло.

1 Ответ

6 голосов
/ 12 июля 2011

Делая

class Render extends CI_Controller

вы создаете не библиотеку, а контроллер! Чтобы создать библиотеку, просто создайте класс и поместите его в папку библиотеки.

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

$CI = & get_instance();

Что-то вроде (файл application/libraries/render.php):

    class Render {

      var $CI;

      function __construct()
      {
        $this->CI = &get_instance();
      }

       public function template($template, $view, $extra_css, $extra_js) {
        $data = array();
        if (isset($view)) {
            $data['view'] = $view;
        }
        if (isset($extra_css)) {
            $data['extra_css'] = $extra_css;
        }
        if (isset($extra_js)) {
            $data['extra_js'] = $extra_js;
        }
        $template = $this->CI->load->view("templates/$template", $data, TRUE);
        return $template;
    }
}

Тогда вы можете $CI->load все, что вы хотите внутри вашей библиотеки, моделей, других библиотек, что угодно.
См. Использование ресурса CI в вашей библиотеке для подробного объяснения этого. Вы называете свою библиотеку обычным способом, $this->load->library('render'), а затем $this->render->whatever();

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