使用户对象可用于Zend中的所有控制器?

时间:2010-12-26 22:44:42

标签: zend-framework session bootstrapping zend-auth

我正在使用Zend_Auth来识别我的应用程序中的用户。 这将使用userobject创建一个会话。

我的问题是如何让每个Controller和action都可以使用这个对象,所以每次我需要来自这个对象的数据时,我都不必将它从会话中拉出来?

我猜这应该在bootstrap.php或index.php中完成,但我真的不知道如何将它用于每个控制器..所以任何代码示例都会受到赞赏!

谢谢!

1 个答案:

答案 0 :(得分:2)

Bootstrapindex.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方法在addPath()中设置的路径和名称空间。

使用控制器插件

列出完整性。但实际上,IMO最好是上面的动作助手。