Я работаю в проекте, который много использует сеанс. У нас есть обработчик db (стандартный от Zend), и в настоящее время у меня есть эта инициализация (обработчик db + запуск сеанса) в плагине для preDispatchLoop. Раньше он был в preDispatch, но из-за того, что он вызывался для каждого действия (включая те, что были в действии «переадресовано», это вызывало у меня проблемы.
Моя проблема в том, что я начал работать в области интернационализации и начал использовать маршрутизатор для определения языка в URI: мы используем форму / язык / контроллер / действие). Маршрутизатор хочет использовать сеанс для чтения / сохранения языка. Но, как вы, возможно, знаете, сначала идет маршрутизатор, а затем (до / после) диспетчерская.
Возникает вопрос: почему бы не перенести инициализацию сеанса в режим начальной загрузки? это потому, что он был там раньше, но мне пришлось переместить его, потому что мне нужно проверить, что db (помните, что сеанс использует db) доступен для предотвращения ошибок. И если есть ошибка, я просто перенаправляю (ошибка request-> setController / setAction). Если я верну код инициализации сеанса к начальной загрузке, я не смогу выполнить перенаправление, если база данных недоступна.
Я прочитал другой вопрос, и я нашел много людей, которые просят получить доступ к объекту запроса из начальной загрузки. Но все говорят: можно, а нельзя. но тогда как мне поступить в этом случае? моим последним вариантом было бы вернуть инициализацию сеансов к начальной загрузке, и если она не удалась, вручную отправить заголовки и прочитать представление, но код ошибки, но это ужасный взлом.
Я считаю, что сеанс не следует использовать так рано. Их не следует вызывать при начальной загрузке, поскольку они еще не полностью осведомлены о запрошенном контроллере / действии. Я думаю, что для получения языка я мог бы просто положиться на файлы cookie (руководство) и получить его оттуда (а также из URI). И если однажды информация о сеансе должна быть использована при начальной загрузке, я бы использовал глобальную переменную.
Что вы думаете ? есть ли ошибка в том, как я управляю приложением?
Некоторые просмотренные вопросы:
Zend Framework: получение объекта запроса в начальной загрузке
Лучший способ справиться с обработкой сеанса в Zend Framework а>
(Zend версии 1.9.6, без использования Application или Bootstrap)