Zend Framework:从控制器传递值到视图时不完整的对象错误

时间:2011-11-01 23:16:41

标签: model-view-controller zend-framework serialization controller

我正在将一个用户对象从控制器传递给视图,然后调用该控制器上的方法。我在视图中的对象上做了一个print_r,所以我知道它是具有正确值的正确对象。 current_user变量是用户类的实例。

这是布局中提供错误的行。

<?php echo $this->current_user->get_avatar_url(); ?>

以下是它正在调用的用户类中的方法

public function get_avatar_url()
{
    return !empty($this->avatar) ? $this->avatar : $this->fb_userid != '' ? "http://graph.facebook.com/".$this->fb_userid."/picture" : "/public/images/pukie.jpg";
}

这是我得到的错误

  

致命错误:main()脚本尝试执行方法或访问不完整对象的属性。请确保在 unserialize()被调用之前加载了您正在尝试操作的对象的类定义“User”,或者提供__autoload()函数以在 /中加载类定义home / breathel / public_html / application / views / layouts / layout.phtml 在线 48

我将包含完整的控制器基础,以便在它产生影响的情况下进行调用

<?php
Zend_Loader::loadClass('Zend_Controller_Action');
Zend_Loader::loadClass('User');

class BaseController extends Zend_Controller_Action
{
    protected $auth;
    protected $current_user;
    protected $db;

    protected function initialize_values()
    {
        $auth = Zend_Auth::getInstance();
        if($auth->hasIdentity())
        {
            $this->current_user = $auth->getIdentity();
            $this->view->current_user = $this->current_user;
        }

        $this->db = Zend_Registry::get('dbAdapter');

        $this->view->controller_name = $this->_request->getControllerName();
        $this->view->view_name = $this->_request->getActionName();
    }
}

1 个答案:

答案 0 :(得分:2)

Zend Framework的授权模块使用会话来保持页面加载的身份,并且可能会将用户模型序列化(特别是如果您只是分配Zend_Auth_Adapter调用的结果)。

在第一次调用getIdentity()之前尝试包含User类,并查看是否修复了它(即使您确信自己没有自行序列化)。