Я пытаюсь понять, как $this->load->view() работает внутри файла вида в CodeIgniter.
Ядро / 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. Пожалуйста, не оставляйте ответы, объясняющие, как использовать $ this-> load ().
В прошлый раз, когда я проверил, $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
Чтобы упростить понимание того, что $this означает в представлении, поскольку представление «загружено» с помощью метода контроллера, представление все еще выполняется в той же области, что и этот метод, что означает, что $this может иметь другой контекст, в зависимости от того, класс загрузил его.
Например:
class Controller1 extends CI_Controller {}
В любом файле просмотра, загруженном в этот примерный контроллер, $this относится конкретно к классу Controller1 , который также может иметь доступ CI_Controller общедоступным и защищенным свойствам / методам 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 в этом файле просмотра будет возвращено другое значение.