Раскладка Zf2 и аутентификация

Я создаю сайт на основе ZF2, и он имеет 2 разных макета. У него есть несколько общедоступных страниц и несколько внутренних страниц, требующих аутентификации пользователя, каждый набор страниц имеет свои макеты. Сначала я думал о создании плагина контроллера и проверке наличия у пользователя личности, после чего я изменю макет, но это также изменит макет общедоступных страниц для вошедшего в систему пользователя, чего мы не хотим. Также я не знаю, как изменить макет из плагина контроллера.

Макет внутренних страниц также требует некоторой информации о текущих пользователях и некоторой другой информации из других таблиц. Поэтому я подумал о создании другого плагина, который будет проверять, есть ли у пользователя личность, а затем устанавливать переменные макета. Я не уверен, как получить объект макета в плагине контроллера для установки переменных. Также не знаю, как получить доступ одного плагина к другому плагину.

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


person M Hill    schedule 26.09.2013    source источник


Ответы (1)


В конечном итоге это выглядит как пользовательский LayoutModule, который вы бы написали. Я полагаю, вы уже ознакомились с EdpModuleLayouts? Если нет, сделайте это.

В основном этот модуль делает следующее: он проверяет текущий модуль, а затем проверяет, есть ли макет, присоединенный к конфигурации для этого самого модуля.

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

person Sam    schedule 26.09.2013
comment
спасибо Сэм, это решает одну проблему. Во-вторых, мне нужно установить некоторую информацию о пользователе в переменные макета для второго макета, поэтому любые предложения. - person M Hill; 26.09.2013
comment
ViewHelpers — VH, который получит доступ к UserIdentity и отобразит все, что вам нравится. - person Sam; 26.09.2013
comment
но информация, которую мне нужно отобразить, не является частью пользовательского объекта. на самом деле это сводка приложения, полученная как минимум из 3 мест. - person M Hill; 26.09.2013
comment
это может помочь - person Sam; 26.09.2013
comment
спасибо, Сэм, теперь немного. Я буду использовать ViewHelper. Таким образом, я могу либо получить все данные в ViewHelperFactory и передать данные ViewHelper, либо я могу передать службы ViewHelper вместе с user_id (который требуется для получения данных). Итак, какой подход, по вашему мнению, следует использовать. - person M Hill; 26.09.2013
comment
Что вы предпочитаете. Лучшая практика заключается в том, чтобы ViewHelper был простым и не раздутым. Но передать конкретную службу в ViewHelper не проблема. Пока вы не проходите ServiceLocator, все хорошо;) - person Sam; 26.09.2013