#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