Повторное использование класса в контроллере Codeigniter - PullRequest
2 голосов
/ 07 июля 2011

Я кодирую свое первое приложение CodeIgniter (очень знакомое с PHP, но не CI) и имею следующую настройку:

У меня есть контроллер, Регистрация, который контролирует процесс регистрации. Каждая функция контроллера является следующим шагом в процессе. У меня есть объект Did, который я сейчас загружаю в виде библиотеки. Свойства / переменные этого объекта обновляются по мере продвижения процесса регистрации.

Проблема, с которой я столкнулся, заключается в том, что свойства одной функции контроллера Registration не переносятся на следующую функцию. Это как если бы класс был перестроен с каждой функцией.

Есть ли способ повторно использовать класс во всем контроллере без необходимости его повторного создания? Я бы тоже не хотел сериализовать и хранить в сеансе.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Как всегда, есть много решений одной и той же проблемы.Пожалуйста, не обращайте на это внимания, если он не подходит для вашей реализации.

Сохранение шагов регистрации в объекте - хорошая идея, однако каждый раз, когда вы загружаете новую страницу, CI перестраивает все объекты.Чтобы данные сохранялись, они должны храниться в сеансе, но это не значит, что вы должны работать с переменными сеанса в вашем контроллере.

Как вы переносите данные в свое приложение?Это через формы или ajax?

Один из способов сделать это - десериализовать объект из сеанса и сохранить его как объект в конструкторе вашего контроллера.Таким образом, вы все равно можете запустить $ myObj-> function () для него и использовать функцию $ myObj-> save () для повторной инициализации и сохранения.

Надеюсь, это поможет!

2 голосов
/ 07 июля 2011

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

Вы ожидаете, что ваш класс будет использовать один и тот же экземпляр вашего Did объекта между запросами.

Это не то, как работает PHP / HTTP. Каждый запрос обрабатывается индивидуально и является собственным экземпляром вашего приложения. Таким образом, каждый запрос создает новый Did объект.

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

Сеансы Codeigniter

Класс базы данных Codeigniter

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