Я решаю архитектурную проблему внутри CI. Мне нужно создать экземпляр других контроллеров и их методов в главном контроллере. Например
*main.php/function index():* $controller2 = new Controller2(); $data['pre_loaded_data'] = $controller2 ->ajax_get_some_view(array('static'=>true));
Целью этого подхода является создание приложения ajax, которое статично загружает некоторые части экрана при первой загрузке, как часть главной html-страницы, но позже эти части обновляются с помощью ajax-методов от различных других контроллеров (в это время с массивом ('static '=> false) param, например, как ответ на событие onclick на главной странице.
Проблема в том, что CI, похоже, не является дизайном для поддержки нескольких контроллеров и бросает различные ошибки, связанные с загрузчиком, сообщая, что какой-то класс не загружается, даже когда он загружен.
Какой был бы лучший подход к предварительной загрузке данных с других контроллеров в основном контроллере?
Возможно, вы захотите сделать базовые классы, которые наследуют контроллеры. Вы также можете попробовать попробовать с помощью HMVC с помощью модульных расширений .
Вот замечательное чтение по базовым классам Фила Штургена и как их реализовать.
Попробуйте поместить функции, такие как get_some_data () в библиотеку, тогда вы сможете включать и вызывать их от каждого контроллера и каждой функции без проблем, отправляя результаты, отформатированные в частичном представлении (статический регистр) или обратно в браузер после ajax-вызов.
Всегда помните, чтобы иметь дело с данными только по моделям и библиотекам. Таким образом, вам не придется беспокоиться о контроле над контроллерами.
// main/index $this->load->library('your_library'); $data['foo'] = $this->your_library->get_foo(); // controller2/get_some_ajax_data $this->load->library('your_library'); echo $this->your_library->get_foo() || '';