Php Zend Framework 2中的视图模型

Php Zend Framework 2中的视图模型,php,zend-framework2,Php,Zend Framework2,我想知道是否有可能或者如何在应用程序模块中定义ViewModel,并将其传递到Zend Framework 2中的layout.phtml中显示。以下是应用程序控制器的代码: 名称空间应用程序\控制器 use Zend\Mvc\Controller\AbstractActionController; use Zend\Session\Container; use Zend\View\Model\ViewModel; class IndexController extends Abstract

我想知道是否有可能或者如何在应用程序模块中定义ViewModel,并将其传递到Zend Framework 2中的layout.phtml中显示。以下是应用程序控制器的代码:

名称空间应用程序\控制器

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> 

任何帮助都将不胜感激

如果要在layout ViewModel(称为根ViewModel)中显示任何内容,应使用控制器的布局插件:

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
作为补充说明,使用插件和视图帮助程序来显示用户名或其他与用户相关的内容,特别是在用户登录时。在Zend\Mvc\Controller\plugin\identity.php中检查Zend\Authentication和插件标识,并在Zend\Mvc\Controller\plugin\Service\IdentityFactory.php中检查其工厂


您可以随时制作自己的标识插件,并使用自定义工厂进行自定义。

这就是ViewHelper发挥作用的地方。ViewHelper可以访问身份验证标识,然后显示您想要显示的任何内容。一个简单的google搜索:S此方法需要检查两端、控制器和布局。如果没有用户名怎么办?像那样,控制器会抛出错误以及布局。此外,做这类事情不是控制器的任务。你真的想把这些东西复制粘贴到你应用程序中每个控制器的每个动作中吗?因为只有这样你才能在每一页上找到变量。。。正如我在评论中所指出的,创建一个执行此任务的ViewHelper。这是一种更好的设计方式,而且麻烦更少@山姆,你看到我在旁注上写的东西了吗?他问我如何将变量传递给主布局,之后我还指出,使用这种方法进行身份验证并不好,他应该使用插件和帮助程序来进行身份验证。@kilop尽管我读了你的旁注,但由于没有经过编辑的答案,我无法撤消投票,我只能添加评论,gomen nasai!