Как вы реализуете составные представления в Zend?

#model-view-controller #zend-framework #view

#модель-представление-контроллер #zend-framework #Вид

Вопрос:

Мне было интересно — как можно реализовать составные представления в Zend. То есть, могу ли я иметь несколько представлений и контроллеров на одной странице? Я знаю, что вы можете использовать макеты и внедрять содержимое одного контроллера в макет, но есть ли способ внедрить несколько контроллеров в конкретный макет?

Заранее спасибо.

Ответ №1:

Я не думаю, что вы можете использовать несколько контроллеров в одном макете, кто-то с большим опытом может поправить меня в этом.

Я не вижу никакой причины, по которой вы хотели бы этого!

Вы можете добавлять либо частичные представления с помощью $this->partial() помощника по просмотру, либо добавить свой собственный помощник по просмотру для добавления содержимого в свой макет. Нет причин, по которым вы не можете получить доступ к моделям непосредственно в своих представлениях, если требуется, пока они считывают данные только для целей отображения. Таким образом я без проблем реализовал боковые панели, формы входа и меню навигации.

Я надеюсь, что это поможет.

С уважением

Гарри

Комментарии:

1. Ну … есть этот помощник , но мы не решаемся назвать его название. Однако можно использовать частичные элементы и помощники представления.

2. помощник по действию просмотра плох, это верно, есть также подход к стеку действий, но некоторые фанатики отвергают ответы, пытаясь объяснить, почему ActionStack не так уж плох. ActionStack делает действия dispatchLoop и плагина более сложными для понимания. ИМХО, я думаю, ActionStack хорош, поскольку его легко преобразовать в ESI-gate или ajax-mode composition, но, похоже, сообщество сейчас использует старые инструменты.

3. Да, я согласен, я, вероятно, буду придерживаться пользовательских помощников просмотра. Спасибо

Ответ №2:

TestController.php

 public function testAction()
{
  $this-view->test = 'hi';
}
  

test.phtml

 <?php
  echo $this->test;
?>
  

layout.phtml

  $this->layout()->test = $this->action('testAction','TestController')
 echo $this->layout()->test;
  

Для получения дополнительной информации, пожалуйста, посетите Apress.Pro.Zend.Фреймворк.Методы.Build.a.Full.CMS.Project