Model view controller Zend Framework 2:修改控制器中layout.pthml的详细信息

Model view controller Zend Framework 2:修改控制器中layout.pthml的详细信息,model-view-controller,layout,zend-framework2,Model View Controller,Layout,Zend Framework2,当我研究Zend Framework 2的框架应用程序时,我想在页面的右上方添加一个标签,显示登录的用户名。但是,我对layout.pthml中定义的导航栏的代码感到困惑,控制器如何与layout.phtml通信以修改它 提前谢谢 此外,当用户未使用帮助器登录时,我需要页面右上角的登录表单。但我不知道如何使用帮助器添加表单,我应该怎么做?从控制器可以使用名为“布局”的控制器插件设置变量: $this->layout()->username = “some value”; 然后在la

当我研究
Zend Framework 2
的框架应用程序时,我想在页面的右上方添加一个标签,显示登录的
用户名。但是,我对
layout.pthml
中定义的导航栏的代码感到困惑,控制器如何与
layout.phtml
通信以修改它

提前谢谢


此外,当用户未使用帮助器登录时,我需要页面右上角的登录表单。但我不知道如何使用帮助器添加表单,我应该怎么做?

从控制器可以使用名为“布局”的控制器插件设置变量:

$this->layout()->username = “some value”;
然后在layout.phtml中,您应该能够执行以下操作:

<?php echo $this->username; ?>


如果您查看
Zend\Mvc\Controller\Plugin\Layout
,您将看到不带参数的
\uu invoke
方法将返回
ViewModel
的一个实例,这就是为什么这样做的原因。

如果您想在module.php上定义它,请使用module.php

public function onBootstrap(MvcEvent $e)
{
  ....
  $e->getViewModel()->setVariable('username', 'some_value');
}
在layout.phtml上

echo $layout->username;

在module.php中,您可以这样做

public function onBootstrap(MvcEvent $e)
{
  ....
  $e->getViewModel()->setVariable('username', $username);
}
在你的布局中你可以做到

echo $this->layout()->username;

还要检查您是否使用了MvcEvent类。

为什么不使用session变量来保存用户名?当然,将用户名推送到控制器中的session中,然后在布局中使用该值。