我正在将一个用户对象从控制器传递给视图,然后调用该控制器上的方法。我在视图中的对象上做了一个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();
}
}
答案 0 :(得分:2)
Zend Framework的授权模块使用会话来保持页面加载的身份,并且可能会将用户模型序列化(特别是如果您只是分配Zend_Auth_Adapter调用的结果)。
在第一次调用getIdentity()之前尝试包含User类,并查看是否修复了它(即使您确信自己没有自行序列化)。