Класс Loader (загрузчик)
Загрузчик, как следует из названия, используется для загрузки элементов. Эти элементы могут быть библиотеками (классами), файлами отображений, помощниками, моделями или вашими собственными файлами.
Примечание: Этот класс инициализируется автоматически системой, поэтому нет необходимости делать это вручную.
Следующие функции доступны в этом классе:
$this->load->library('class_name', $config, 'object name')
Эта функция используется для загрузки классов ядра. class_name это имя класса, который вы хотите загрузить. Примечание: мы используем термины «класс» и «библиотека» с одним и тем же смыслом.
Например, если вы хотите отправить почту с CodeIgntiter, первым шагом будет загрузка класса электронной почты в вашем контроллере:
$this->load->library('email');
Загруженный объект класса будет готов к использованию через $this->email->some_function().
Файлы библиотек могут храниться в поддиректориях в основной директории "libraries", или в вашей персональной директории application/libraries. Чтобы загрузить файл из поддиректории, просто включите путь, относительный к директории libraries. Например, если вы имеете файл, находящийся в:
libraries/flavors/chocolate.php
Загружайте его, используя:
$this->load->library('flavors/chocolate');
Вы можете вкладывать файлы в поддиректории столько, насколько пожелаете.
Также можно загружать множество библиотек, передав их список в массиве загружающей функции.
$this->load->library(array('email', 'table'));
Установка опций
Второй (опциональный) параметр позволяет вам опционально передавать настройки конфигурации. Обычно вы можете передавать их в массиве:
$config = array (
'mailtype' => 'html',
'charset' => 'utf-8,
'priority' => '1'
);
$this->load->library('email', $config);
Опции конфигурации обычно могут устанавливаться в конфигурационном файле. Каждая библиотека детально описана на своей странице, поэтому пожалуйста прочтите информацию о каждой из них, если вы хотите их использовать.
Пожалуйста обратите внимание, что когда загружаются несколько библиотек одним вызовом, каждая из них получает одни и те же передеданные параметры.
Ассоциирование библиотеки с другим именем объекта
Если третий (опциональный) параметр пуст, библиотека будет ассоциированна с объектом, имя которого такое же, как и у библиотеки. Например, если библиотека называется Session, она будет ассоциирована с объектом $this->session.
Если вы предпочитаете устанавливать собственное имя класса, вы можете передать его значением третьего параметра:
$this->load->library('session', '', 'my_session');
// Объект класс сессий теперь доступен, как:
$this->my_session
Пожалуйста обратите внимание, что когда загружается множество библиотек одним массивом, этот параметр игнорируется.
$this->load->view('file_name', $data, true/false)
Эта функция используется для загрузки отображений. Вы можете прочитать раздел руководства об отображениях, чтобы узнать, как использовать эту функцию.
Первый параметр требуется обязательно. Это имя файла отображения, который вы хотите загрузить. Примечание: не указывайте расширение .php, если вы загружаете PHP-файлы. Указывайте расширение только в том случае, если загружаете другие файлы, кроме .php.
Второй опциональный параметр может принимать объект или массив на вход, который будет пропущен через функцию PHP extract, таким образом переменные будут использованы в ваших отображениях. Снова прочтите страницу Отображения чтобы изучить, как это полезно.
Третий опциональный параметр позволяет вам изменить поведение функции, так что она возвращает данные строкой, а не посылает их в браузер. Это может быть полезно, если вы хотите обрабатывать данные иным путем. Если вы установите параметр в TRUE, функция вернет данные. Поведение по умолчанию — FALSE, что означает, что данные всегда отправляются в браузер. Помните, что необходимо ассоциировать вывод функции переменной, если вы хотите получить данные:
$string = $this->load->view('myfile', '', true);
$this->load->model('model_name');
$this->load->model('model_name');
Если ваша модель находится в поддиректории, включите относительный путь от вашей директории с моделями. Например, если вы имеете модель, находящуюся в application/models/blog/queries.php, вы будете загружать ее так:
$this->load->model('blog/queries');
Если вы хотите ассоциировать вашу модель с объектом другого имени, укажите новое имя во втором парамере загружающей функции:
$this->load->model('model_name', 'fubar');
$this->fubar->function();
$this->load->database('options', true/false)
Эта функция позволяет вам загружать класс базы данных. Два параметра являются опциональными. Пожалуйста посмотрите раздел база данных для дополнительной информации.
$this->load->vars($array)
Эта функция принимает ассоциативный массив на вход, и генерирует переменные, используя функцию PHP extract. Эта функция дает такой же результат, как и использование второго параметра в функции $this->load->view(), описанной выше. Вы можете захотеть использовать эту функцию, чтобы установить некоторые глобальные переменные в конструкторе контроллера, чтобы они были доступны в любом файле отображения, загруженными любой функцией. Вы можете делать множественные вызовы этой функции. Данные будут кешированы и слиты в одном массиве для конвертации в переменные.
$this->load->get_var($key)
Эта функция проверяет ассоциативный массив переменных, доступных для отображений. Это полезно, если по какой-то причине переменная устанавливается в библиотеке или в другом методе контроллера, используя $this->load->vars().
$this->load->helper('file_name')
Эта функция загружает файлы-помощники, где file_name это имя файла без расширения _helper.php.
$this->load->file('filepath/filename', true/false)
Это основная функция загрузки файлов. Передайте путь и имя файла в первом параметре, и она откроет и считает файл. По умолчанию данные отправляются в ваш браузер, как данные отображения, но если вы установите второй параметр в TRUE, вы получите возвращенные данные в строке.
$this->load->language('file_name')
Эта фунция является алиасом функции загрузки языка: $this->lang->load()
$this->load->config('file_name')
Эта фунция является алиасом функции загрузки конфигурации: $this->config->load()
«Пакеты» приложений
Пакеты приложений доступны для легкой дистрибьюции завершенных наборов ресурсов в единственной директории, укомплектованных собственными библиотеками, моделями, помощниками, конфигурациями и языковыми файлами. Рекомендуется размещать эти пакеты в директории application/third_party. Ниже приведена образцовая карта директории пакета.
Образец структуры директории пакета "Foo Bar"
Ниже следует пример структуры директории пакета "Foo Bar".
/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/
Вне зависимости от цели пакета "Foo Bar", он имеет собственный файл конфигурации, помощники, языковые файлы, библиотеки и модели. Чтобы использовать эти ресурсы в вашем контроллере, сперва укажите загрузчику, что вы хотите использовать ресурсы из пакета, указав путь к нему .
$this->load->add_package_path()
Добавление пути пакета указывает классу Loader на необходимость добавления указанного пути для запросов ресурсов. Как пример, пакет приложения "Foo Bar" имеет библиотеку Foo_bar.php. В нашем контроллере, мы сделаем следующее:
$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
$this->load->library('foo_bar');
$this->load->remove_package_path()
Когда ваш контроллер закончит использование ресурсов из пакета, и особенно если у вас есть другие пакеты приложения, которые вы хотите запустить, вы можете удалить путь пакета так, что загрузчик более не будет искать ресурсы по указанному пути. Чтобы удалить последний добавленный путь, просто вызовите метод без параметров.
$this->load->remove_package_path()
Чтобы удалить конкретный путь пакета, укажите путь, который вы указывали при добавлении пакета:
$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
Пакеты отображений
По умолчанию пакеты файлов отображений устанавливаются при вызове add_package_path(). Просматриваются все пути, и загружается первое найденное отображение из подходящих.
В этом случае возможны коллизии имен между пакетами, и возможно не загружается подходящий пакет. Чтобы предотвратить это, установите второй опциональный параметр в FALSE при вызове add_package_path().
$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // загружается
$this->load->view('welcome_message'); // не будет загружено welcome_message по умолчанию, так как второй параметр к add_package_path() установлен TRUE
// сбрасываем
$this->load->remove_package_path(APPPATH.'my_app');
// снова без второго параметра:
$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // загружается
$this->load->view('welcome_message'); // загружается