Zend Framework 2 отображает представление в представлении

У меня есть два модуля Admin и Login.

Я хочу отобразить вид входа «login.phtml» в представлении администратора «index.html»

У меня есть в контроллере indexAction контроллер

public function indexAction() { $login = new LoginController(); $view = new ViewModel(array( 'theloginform' => $login->loginAction(), )); return $view; } 

В методе LoginAction в контроллере Login я возвращаю ViewModel для файла login.phtml.

 public function LoginAction() { $view = new ViewModel(); return $view; } 

IndexAction выдает ошибку, поскольку переменная 'theloginform' является объектом.

 Catchable fatal error: Object of class Zend\View\Model\ViewModel could not be converted to string in... 

Если я добавлю следующее:

 $authentication->loginAction()->captureTo('test') 

«Index.phtml» показывает строку «content».

Я прочитал, что мне может понадобиться визуализировать ViewModel, прежде чем я назначу его переменной вида 'theloginform', но я не могу заставить ее работать, я пробовал следующее без везения.

 public function LoginAction() { $view = new ViewModel(); $renderer = new PhpRenderer(); $resolver = new Resolver\AggregateResolver(); $map = new Resolver\TemplateMapResolver(array( 'login' => __DIR__ . '/../view/login.phtml' )); $resolver->attach($map); $view->setTemplate("login"); return $renderer->render($view); } 

Если вы получите следующую ошибку:

 Zend\View\Renderer\PhpRenderer::render: Unable to render template "login"; resolver could not resolve to a file 

Я даже попытался добавить DI в файл autoload_classmap.php, но все равно получить ту же ошибку, я дважды проверил файл login.phtml на правильном пути:

'/Login/view/login/login/login.phtml' Я даже скопировал его в '/Login/src/Login/view/login.phtml'

Очень растерянные прочитали, а затем перечитали документацию Zend, я просто хочу передать представление другому представлению …

Solutions Collecting From Web of "Zend Framework 2 отображает представление в представлении"

В ZF 1.x я, скорее всего, рекомендую вам создать помощник действий, на который ссылаются на замещающий объект или плагин контроллера, который обращается к loginAction для логики формы.

В Zf2 похоже, что помощники действий были заменены плагинами контроллера и, похоже, запускаются через диспетчер событий и, возможно, должны быть осведомлены об одном или нескольких «менеджерах» . Однако помощник просмотра заполнителя все еще существует и даже кажется немного знакомым.

Я бы посоветовал вам изучить создание / адаптацию плагина контроллера для отображения формы входа в систему, которая затем может быть привязана к помощнику вида-заполнителя. Возможно, вы сможете получить требуемую функциональность только с помощью помощника вида, если вам повезет.

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

Удачи.

Если вам нужно поделиться некоторым контентом, вы можете использовать для этого частичные:

 $this->partial('partial/login.pthml', array()); //add this to your index view 

вы можете прочитать о них здесь

Вы также можете найти полезную информацию: как Zend Framework 2 делает частичные части внутри модуля?

В соответствии с этой страницей документации zf2

Напишите это в логине Действие:

  public function loginAction() { return new ViewModel(); } 

И в indexAction:

  $view = new ViewModel( array( //here any thig you want to assign to index view ) ); $loginView = new ViewModel( array( //here any thig you want to assign to login view ) ); $loginView->setTemplate('moduleName/controllerName/login'); $view->addChild($loginView, 'login'); return $view 

В index.phtml вы можете просто echo login <? echo $this->login ?> <? echo $this->login ?> где вы хотите отображать loginView.

В вашем админ-представлении вам нужно использовать вспомогательный помощник рендеринга и эхо обработать сценарий, чтобы вы могли сделать echo $this->render($this->theloginform);