$ это ключевое слово в представлении CodeIgniter - PullRequest
3 голосов
/ 02 сентября 2011

Я пытаюсь понять, как $this->load->view() работает внутри файла представления в CodeIgniter.

core / Controller.php вызывает core / Loader.php, который затем вызывает_ci_load (), который в свою очередь include('/path/to/view');

не должен $this ссылаться на класс Loader в этой точке?Как $this ссылается на контроллер?

Насколько я понимаю, вы должны вызывать $ this-> view () внутри файла представления.Не $ this-> load-> view (), потому что функция load () недоступна внутри загрузчика.Это переменная класса базового класса Controller.т.е. $this->load =& load_class('Loader');

Обратите внимание: я пытаюсь понять внутреннее устройство CodeIgniter.Я прекрасно знаю, как встраивать файлы просмотра в другие файлы просмотра как CodeIgniter user .Пожалуйста, не оставляйте ответы, объясняющие, как использовать $ this-> load ().

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

Чтобы упростить понимание того, на что $this ссылается в представлении, поскольку представление «загружается» методом контроллера, представление все еще выполняется в той же области, что и этот метод, то есть $this может иметьразличный контекст в зависимости от того, какой класс загрузил его.

Например:

class Controller1 extends CI_Controller {}

В любом файле представления, загруженном в этом примере контроллера, $this относится конкретно к классу Controller1, которыйможет также получить доступ к CI_Controller открытым и защищенным свойствам / методам (например, к классам Loader или Input, которые назначены для свойств load и input CI_Controller), поскольку он расширяет этого класса.

Контроллеры - это просто старые классы PHP.Если бы я должен был сделать это:

class Controller1 extends CI_Controller {
    $this->foobar = 'Hello';
}
class Controller2 extends CI_Controller {
    $this->foobar = 'World';
}

... если мы загрузим тот же файл представления в любом методе любого из этих контроллеров, использование $this->foobar в этом файле представления будетвернуть другое значение.

3 голосов
/ 02 сентября 2011

В последний раз, когда я проверял, $this был класса CI_Loader, попробуйте var_dump($this); в представлении.


Выезд:

https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Controller.php

is_loaded(); возвращает массив с уже загруженными именами классов и их псевдонимами из основного контейнера.

$this->load - это экземпляр CI_Loader внутри контроллера.


Проверка:

https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php

Линия 778

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