Следует ли изменять заполнители с контроллеров?

#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:

Это вопрос личных предпочтений. Я всегда делегирую эту ответственность представлению, поэтому, на мой взгляд, да, это должно быть обработано представлением.