2013-11-01 60 views
0

我想知道是否有可能或者如何能够在Application模块中定义一个ViewModel并将它传递到Zend Framework 2中的layout.phtml中显示。下面是代码应用控制器:在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可以访问身份验证标识,然后显示您想要显示的任何内容。 – Sam

+0

这将如何工作? – user2101411

+0

一个简单的谷歌搜索:S http://blog.evan.pro/creating-a-simple-view-helper-in-zend-framework-2 – Sam

回答

-1

如果你想显示在布局视图模型东西被称为根视图模型,你应该用你的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 

作为注意使用插件和视图助手显示用户名或其他用户相关的东西,特别是如果你的用户登录。检查Zend \身份验证和插件身份()它在Zend \ Mvc \ Controller \ Plugin \ Identity.php并检查其工厂在Zend \ Mvc \ Controller \ Plugin \ Service \ IdentityFactory中。 php

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

+0

谢谢你的帮助! – user2101411

+0

此方法需要检查两端,控制器和布局。如果没有用户名,该怎么办?就像那个控制器会抛出一个错误和布局一样。此外,做这种事情并不是控制器的任务。你真的想将这些东西复制到应用程序中每个控制器的每一个动作中吗?因为只有这样你才能在每个页面上都有可用的变量......正如我的评论指出的那样 - 创建一个能够完成这项工作的ViewHelper。这是更好的设计和更少的麻烦;) – Sam

+1

@Sam你看到我写了我的旁注吗?他问的是将变量传递给主布局,然后我还指出,使用这种方法进行身份验证并不好,他应该使用插件和帮助器。 – kilop