【问题标题】:how to get view object in a plugin?如何在插件中获取视图对象?
【发布时间】:2011-12-08 19:23:09
【问题描述】:

我有一个控制器操作助手,我在其中将用户对象保存到视图中(在 init 函数中),如下所示:

Zend_Layout::getMvcInstance()->getView()->user = $user;

我想在控制器插件的 preDispatch 方法中访问对象,这样我就不必在数据库中查找用户。我试着这样做:

$user = Zend_Layout::getMvcInstance()->getView()->user;

但它返回一个空对象。我希望这是因为我做错了,而不是因为我在我的登录逻辑中编写了一个 catch 22。还有其他方法可以访问该对象吗?

【问题讨论】:

    标签: zend-framework plugins


    【解决方案1】:

    我认为将以下方法放入您的操作助手中可能会对您有所帮助。

    private $user
    
    public function init()
    {
        $this->user = new user();
    }
    
    public function preDispatch()
    {
        $user = $this->user;
        //Do whatever you wish with the user object.
        // although you probably don't need to do anything.
    }
    
    public function direct()
    {
        Zend_Layout::getMvcInstance()->getView()->user = $this->user;
        //alternatively just return the user object or whatever you want to do
    }
    

    然后,一旦你的助手被注册,你可以简单地在你的控制器中执行$this->_helper->helperName() 将用户对象放入视图中。

    Mathew WeirO'Phiney 在 devzone 上有一个 good explanation of action helpers。尤其是direct() 方法的用途。

    【讨论】:

      【解决方案2】:

      是的,好的方法是为当前登录的用户设置一个单例类;在这种情况下,它可以在任何地方访问——插件、视图、表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多