我正在尝试学习如何使用 Zend 框架,但遇到了麻烦。我试图将当前用户名放在应用程序的标题中(显示在每个页面上),特别是 /layouts/scripts/default.phtml。
MVC 架构对我来说非常新,让我非常困惑。我不想每次都在控制器中放置逻辑来显示这个用户名(这可能是错误的做法),那么如果不在每个控制器中,我应该在哪里放置代码来分配这个变量?
干杯
我正在尝试学习如何使用 Zend 框架,但遇到了麻烦。我试图将当前用户名放在应用程序的标题中(显示在每个页面上),特别是 /layouts/scripts/default.phtml。
MVC 架构对我来说非常新,让我非常困惑。我不想每次都在控制器中放置逻辑来显示这个用户名(这可能是错误的做法),那么如果不在每个控制器中,我应该在哪里放置代码来分配这个变量?
干杯
这就是动作助手的设计目的。关于它们的完整教程有点超出 SO 的范围,但是有几个很好的教程可用。
从Zend 框架文档开始,然后看看Mathew Weier O'Phinney 的教程和Rob Allen的教程。
为这种事情使用基本控制器的问题是,无论您的控制器是否需要它们,资源都会被加载,而动作助手仅在需要时才加载。
我差点忘了ZendCast 有一个关于动作助手的视频。
您需要一个基本控制器并在preDispatch
方法中分配它:
class MyApp_Controller_Action extends Zend_Controller_Action {
public function preDispatch() {
parent::preDispatch();
Zend_Layout::getMvcInstance()->assign('username', getCurrentUserName());
}
}
然后使用该新类扩展您自己的控制器:
class MyApp_Module_ActionController extends MyApp_Controller_Action {
}
然后在您的布局视图中:
echo $this->layout()->username;
首先,阅读手册,然后尝试完成以下操作:
class BaseController extends Zend_Controller_Action {
public function preDispatch() {
// your logic to show the user name goes here
}
}
class SomePageController extends BaseController {}
class SomeOtherPageController extends BaseController {}
这很可能会解决您的问题。