#php #model-view-controller #zend-framework #zend-view
#php #модель-вид-контроллер #zend-framework #zend-view
Вопрос:
Допустим, у меня есть простой веб-сайт, на котором пользователи могут войти в систему. Когда они войдут в систему, я хочу показать им другое сообщение, чем пользователям, которые не являются таковыми (гостям). Это сообщение должно отображаться в виде заполнителя путем добавления к нему сообщения.
Где это должно быть сделано? Я думал о том, чтобы мой контроллер проверял, авторизован пользователь или нет, а затем добавлял к заполнителю через $this->view->placeholder("sidebar")->append()
Ответ №1:
Почему бы просто не поместить это в сам макет?
Например, у меня часто возникает следующая ситуация, которая влияет на мой макет: если пользователь вошел в систему, я хочу отобразить его имя пользователя, ссылку для просмотра / редактирования его профиля и ссылку для выхода из системы. Если он не авторизован, то я показываю ему ссылку для входа в систему и ссылку для регистрации.
Код для обработки всего этого использует Zend_Auth::hasIdentity()
, Zend_Auth::getIdentity()
и url()
view-helper. Чтобы сделать код макета немного компактнее, я часто помещаю все это в свой собственный view-helper, называемый что-то вроде authLinks()
.
Ответ №2:
Лучшим решением может быть переключение макета на основе статуса аутентификации текущего пользователя. Это можно сделать с помощью плагина в preDispatch или в preDispatch внутри вашего контроллера. Размещая логику отображения на уровне представления, вам не нужно обновлять код более низкого уровня, если вы решите изменить сообщение или удалить все это вместе.
Я бы лично предпочел, чтобы это было в плагине для контроллера, поскольку это отвлекает внимание от проверки статуса аутентификации и обновления представления от контроллеров и избавляет вас от необходимости беспокоиться о размещении соответствующего кода в любых контроллерах, которые вы создадите в будущем.
Ответ №3:
Это вопрос личных предпочтений. Я всегда делегирую эту ответственность представлению, поэтому, на мой взгляд, да, это должно быть обработано представлением.