У меня есть два модуля 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, я просто хочу передать представление другому представлению …
В 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);