Я пытаюсь понять, как $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
в этом файле просмотра будет возвращено другое значение.