我正在使用 Zend_Auth 来识别我的应用程序中的用户。这将创建与用户对象的会话。
我的问题是如何让每个控制器和操作都可以使用这个对象,这样我就不必每次需要来自这个对象的数据时都将它从会话中拉出来?
我猜这应该在 bootstrap.php 或 index.php 中完成,但我真的不知道如何让每个控制器都可以使用它。所以任何代码示例都将不胜感激!
谢谢!
我正在使用 Zend_Auth 来识别我的应用程序中的用户。这将创建与用户对象的会话。
我的问题是如何让每个控制器和操作都可以使用这个对象,这样我就不必每次需要来自这个对象的数据时都将它从会话中拉出来?
我猜这应该在 bootstrap.php 或 index.php 中完成,但我真的不知道如何让每个控制器都可以使用它。所以任何代码示例都将不胜感激!
谢谢!
Bootstrap
而且index.php
可能还为时过早。$user
由于尚未完成路由,因此没有控制器可以将您的对象注入其中。
想到了几种可能性:
使用 BaseController
创建一个BaseController
所有其他控制器都扩展的表单。在init()
您的基本控制器的方法中,您可以放置您的作业
$this->_user = Zend_Auth::hasIdentity() ? Zend_Auth::getIdentity() : null;
然后$this->_user
将在您的控制器操作的任何地方可用。
但是很多人嘲笑 BaseController 的想法。最好使用 Action Helper,如下所述。
使用动作助手
创建一个动作助手,其direct()
方法返回以$user
与上面相同的方式创建的对象。然后在您的控制器中,您可以将其作为$this->_helper->user
.
确切地说,您命名辅助类以及放置它的位置取决于您在Zend_Controller_Action_HelperBroker
usingaddPath()
方法中设置的路径和命名空间。
使用控制器插件
为完整性而列出。但实际上,IMO 最好的是上面的 Action Helper。