CodeIgniter: жизненный цикл контроллеров - PullRequest
3 голосов
/ 07 ноября 2010

Текст довольно длинный, вопрос на самом деле прост и написан жирным шрифтом .Другой текст предназначен только для объяснения проблемы.

Я недавно начал использовать CodeIgniter для разработки своего веб-сайта.В настоящее время я пишу боковое меню, в котором можно отфильтровать элементы, отображаемые в представлении (основные функции электронной коммерции).

У меня была идея создать массив в моем Shop-контроллере, где я храню свои значения фильтрации, которые передаются в мой фильтр и из него, поэтому меню фильтров может обрабатывать несколько типов фильтров.1008 * Проблема в том, что кажется, что конструктор контроллера запускается каждый раз, когда вызывается контроллер.Я думал, что контроллер был построен только один раз, когда пользователь заходит на сайт.Я довольно новичок в разработке веб-сайтов и в основном парень на C ++, так что мне это кажется немного странным.

Мой вопрос довольно прост: Правда ли, что экземпляр контроллера создается при каждом вызове функции контроллера?В противном случае, что я делаю не так, чтобы заставить экземпляр контроллера восстанавливаться при каждом вызове контроллера ...

Я надеюсь, что мой вопрос не слишком размыт.Для меня важно понять поведение CodeIgniter в течение жизненного цикла, чтобы найти простое решение для этого.Я хотел бы избежать использования $ _SESSION, потому что я хотел бы использовать решение, подобное ООП.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2010

Правда ли, что экземпляр контроллера создается при каждом вызове функции контроллера?В противном случае, что я делаю неправильно, чтобы экземпляр экземпляра контроллера восстанавливался при каждом вызове контроллера.

Да, экземпляр контроллера повторно создается каждый раз, когда вы делаете вызов этому контроллеру.В CodeIgniter нет такой вещи, как постоянный экземпляр вашего контроллера для каждого пользователя, взаимодействующего с вашим приложением (в отличие от однопользовательских приложений, построенных на C ++).То, что у вас есть, - это управление сеансами, где вы используете переменные сеансов для хранения данных, сохраняемых в этом конкретном сеансе между браузером пользователя и вашим веб-сервером ( more ).Еще один способ сделать это с помощью куки.Лично я предпочитаю сеанс, а не куки.

Использование $ _SESSION для целей вашего фильтра не повредит, и это не противоречит принципам ООП.Важно то, как вы используете данные, хранящиеся в переменной Session после загрузки экземпляра контроллера (вот где вступают в игру концепции ООП).

0 голосов
/ 15 ноября 2014

Шиваас, такой же ответ можно безопасно использовать с моделями?А как насчет автозагрузки моделей?Я имею в виду, автозагрузка - это просто способ избежать ввода $ this-> load-> model ('the_model') при необходимости?Нет способа использовать шаблон синглтона без повторения сеанса / базы данных?

private $instance;

function init_model() {
    if ($this->instance === NULL) {
        $this->instance = array();
    }
    return $this->instance;
}

После выхода из init_model экземпляр класса уничтожается, поэтому $ instance всегда будет инициализироваться новым массивом ()?

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