Как работает нагрузка codeigniter? - PullRequest
7 голосов
/ 09 июля 2011

У меня возникли некоторые затруднения с пониманием того, как работает загрузка кодовых подписчиков.

Ну, во-первых, у вас есть автозагрузка, которая кажется довольно простой, она загружает все каждый раз.Так что это звучит хорошо, чтобы использовать для вещей, которые я использую все время.

Во-вторых, вы можете загрузить все встроенное.Но вот мой вопрос: как долго он остается загруженным?

Допустим, я загружаю библиотеку проверки формы в контроллер, затем загружаю модель, могу ли я использовать проверку формы в модели или у меня естьперезагрузить его снова?Продолжая, скажем, я загружаю представление и другой контроллер, могу ли я использовать проверку формы?Или мне нужно загрузить?После перенаправления?Как насчет того, чтобы загрузить библиотеку или модель, или помощника?Допустим, я хочу использовать модель внутри другой модели, куда мне ее загрузить?

Итак, основной вопрос, как долго, а точнее, как далеко идет загрузка до того, как мне нужно перезагрузить?

Ответы [ 3 ]

5 голосов
/ 09 июля 2011

Загрузка, как правильно заметил @yi_H, длится в течение всего текущего времени жизни скрипта. И.Е. когда вы вызываете метод контроллера, ресурс загружается. Если вы вызываете тот же ресурс внутри другого метода, он больше не доступен.

Это происходит потому, что контроллер инициализируется при каждом запросе, поэтому при доступе index.php/mycontroller/method1 контроллер инициализирован (вы можете включить логи и увидеть это ясно). В вашем методе вы загружаете, скажем, помощник HTML. Если после этого вы получите доступ к index.php/mycontroller/method2,, и для этого также потребуется вспомогательный html, но вы не загрузили его в метод, вы получите ошибку функции не найдена.

Итак, если вы хотите, чтобы один и тот же ресурс всегда был доступен, у вас есть 3 варианта:

  1. автозагрузка в приложении / config / autoloader.php
  2. загружать его при каждом запросе, то есть внутри каждого метода, который будет использовать этот ресурс
  3. поместите его в конструктор контроллера, чтобы он всегда инициализировался при каждом запросе.

Это более или менее то же самое, что автозагрузка, за исключением того, что он может работать только для контроллера, в который вы помещаете конструктор, поэтому вы получаете преимущество, когда не хотите, чтобы что-то загружалось на КАЖДОМ контроллере (например, когда вы использовать автозагрузку) но только на несколько. Чтобы использовать этот последний метод, не забудьте ВЫЗЫВАТЬ РОДИТЕЛЯ КОНСТРУКТОРА внутри вашего контроллера (как вы обычно делаете с моделями):

function __construct()
{
  parent::__construct();
  $this->load->library('whateveryouwant');
}
0 голосов
/ 09 июля 2011

Он остается там до конца времени (то есть, когда ваш сценарий заканчивается и вселенная разрушается)

0 голосов
/ 09 июля 2011

Чтобы загрузить что-то при написании вашей собственной модели или помощника, например:

$ci = get_instance();
$ci->load->library('user_agent');
$ci->load->database();

По поводу всех остальных вопросов, я думаю, вы должны загрузить то, что вам нужно для каждого контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...