Загрузка, как правильно заметил @yi_H, длится в течение всего текущего времени жизни скрипта. И.Е. когда вы вызываете метод контроллера, ресурс загружается. Если вы вызываете тот же ресурс внутри другого метода, он больше не доступен.
Это происходит потому, что контроллер инициализируется при каждом запросе, поэтому при доступе
index.php/mycontroller/method1
контроллер инициализирован (вы можете включить логи и увидеть это ясно). В вашем методе вы загружаете, скажем, помощник HTML.
Если после этого вы получите доступ к index.php/mycontroller/method2,
, и для этого также потребуется вспомогательный html, но вы не загрузили его в метод, вы получите ошибку функции не найдена.
Итак, если вы хотите, чтобы один и тот же ресурс всегда был доступен, у вас есть 3 варианта:
- автозагрузка в приложении / config / autoloader.php
- загружать его при каждом запросе, то есть внутри каждого метода, который будет использовать этот ресурс
- поместите его в конструктор контроллера, чтобы он всегда инициализировался при каждом запросе.
Это более или менее то же самое, что автозагрузка, за исключением того, что он может работать только для контроллера, в который вы помещаете конструктор, поэтому вы получаете преимущество, когда не хотите, чтобы что-то загружалось на КАЖДОМ контроллере (например, когда вы использовать автозагрузку) но только на несколько.
Чтобы использовать этот последний метод, не забудьте ВЫЗЫВАТЬ РОДИТЕЛЯ КОНСТРУКТОРА внутри вашего контроллера (как вы обычно делаете с моделями):
function __construct()
{
parent::__construct();
$this->load->library('whateveryouwant');
}