2013-11-01 2 views
0

Мне было интересно, если это возможно или как можно определить ViewModel в модуле приложения и передать его для отображения в layout.phtml в Zend Framework 2. Вот код для контроллер Применение:Модели в Zend Framework 2

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\Session\Container; 
use Zend\View\Model\ViewModel; 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     $container = new Container('session'); 

     return new ViewModel(array('username' => $container->username, 
            'password' => $container->password)); 
    } 
} 

This is the layout.phtml page I am trying to get username to display 

<ul class="nav navbar-nav navbar-right"> 
    <li><p class="navbar-text" style="font-family: Papyrus, fantasy; font-size: 20px;">  
    <?php echo $username; ?></p></li> 
    </ul> 

Любая помощь будет оценена.

+0

Это то, где ViewHelpers вступает в игру. ViewHelper имеет доступ к идентификатору auth, а затем отображает все, что вы хотите отобразить. – Sam

+0

Как это будет работать? – user2101411

+0

один простой поиск в Google: S http://blog.evan.pro/creating-a-simple-view-helper-in-zend-framework-2 – Sam

ответ

-1

Если вы хотите отобразить что-либо в макет ViewModel, который называется корень ViewModel, вы должны использовать макет controller`s() плагин:

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     $container = new Container('session'); 
     $mainLayout = $this->layout(); 
     $mainLayout->setVariable('foo', 'bar'); //it accepts array too 
     return new ViewModel(array('username' => $container->username, 
           'password' => $container->password)); 
    } 
} 

В layout.phtml

<?php echo $this->foo ;?> // or just $foo 

Как side note использовать плагины и просматривать помощники для отображения имени пользователя или другого связанного с пользователем материала, особенно если ваш пользователь вошел в систему. Проверьте Zend \ Authentication и идентификатор плагина() в Zend \ Mvc \ Controller \ Plugin \ Identity.php и проверьте его фабрика в Zend \ Mvc \ Controller \ Plugin \ Service \ IdentityFactory. php

Вы всегда можете создать свой собственный плагин идентификации и использовать свою собственную фабрику для ее настройки.

+0

спасибо, что помогли! – user2101411

+0

Этот метод требует проверки на обоих концах, контроллера и макета. Что делать, если имя пользователя отсутствует? Подобно этому контроллеру будет выдаваться ошибка, а также макет. Кроме того, выполнение такого рода работ не является задачей контроллера. Вы действительно хотите скопировать этот материал в каждое действие каждого контроллера в своем приложении? Потому что только тогда у вас будет доступная переменная на каждой странице ... Как указано в моем комментарии - создайте ViewHelper, который выполняет эту работу. Это лучший дизайн и гораздо менее хлопотливый;) – Sam

+1

@ Сэм вы видели то, что я написал как i side note? Он спрашивал о передаче переменной в основной макет, и после этого я также указал, что использование этого метода для аутентификации не является хорошим, и для этого он должен использовать для этого плагины и помощники. – kilop