#zend-framework
#zend-framework
Вопрос:
У меня есть базовый контроллер CMS, который расширяют большинство других моих контроллеров. У него есть действие по умолчанию для действий list, create, read, update и delete, все они устанавливают заголовок на основе имени ресурса (ов), с которым работает пользователь.
Действие index по умолчанию содержит только одну строку:
$this->_forward('list');
Теперь моя проблема в том, что мой ранее установленный заголовок исчезает, когда я открываю индекс контроллера CMS. Я хотел бы знать, что может происходить и каково наилучшее решение этой проблемы.
Обратите внимание, что проблема не появляется, если я переименую свое действие списка в index. Также может иметь значение, что изменение заголовка представления в индексном действии не работает.
Комментарии:
1. Я правильно вас понял? Если пользователь нажимает / index, вы хотите, чтобы заголовок был «index», а не «list», но все равно получал вывод списка?
2. Допустим, пользователь редактирует статьи. Я хочу, чтобы он видел заголовок как «Список статей», когда он нажимает /cms/articles . Это происходит, когда он попадает в /cms/articles/list
Ответ №1:
Хм, где вы устанавливаете свой заголовок и каким образом вы это делаете? Лично мои заголовки состоят всего из двух частей, таких как «Приложение: текущее действие». Для достижения этой цели я делаю следующее:
//layout.phtml
<?=$this->headTitle()->setPrefix('APP: ')?>
//indexAction()
$this->_forward('list');
//listAction()
$this->view->headTitle()->append('List Data');
Я делаю это для каждого действия отдельно, и, поскольку я не присваиваю заголовок в indexAction(), я получаю полный требуемый заголовок «ПРИЛОЖЕНИЕ: данные списка» внутри listAction(). Это остается верным, если у меня есть действие редактирования, подобное следующему
//editAction()
if (!is_numeric($this->_getParam('id'))) {
return $this->_forward('list');
}
Если это не поможет вам, ваши скрипты понадобятся для поиска ошибки в другом месте 🙂
Комментарии:
1. На самом деле я не использую контейнер, я просто устанавливаю заголовок как обычную объектную переменную следующим образом: $this-> view-> title = ‘Мой новый заголовок’;
2. Должно работать в любом случае: возможно, S показывает соответствующие части вашего контроллера и сценарии просмотра.
Ответ №2:
На самом деле, моя первоначальная идея об этой проблеме, связанной с маршрутизацией, была правильной. Я загружаю макет в действие preDispatch контроллера действий. Итак, что на самом деле произошло, так это то, что я заново создал свой вид макета после установки атрибута title в действии index.