用户模型中的gravatar


gravatar in user model

在我的models/User.php中,我该如何为我的gravatar调用小部件?这可能/可取吗?还是应该只调用视图中的小部件?

这是我的功能

public function getAvatar() {
            $user = User::model()->findByPk(Yii::app()->user->id);
            $id = $user->id;
            $dir = 'uploads/user';
            $img = $user->avatar_link;
            $full_img_dir = './'.$dir.'/'.$id.'/'.$img;
        if (!empty($img) && file_exists($full_img_dir)) 
        {
               return Yii::app()->request->baseUrl.'/'.$dir.'/'.$id.'/'.$img;
        }
        else
        {
            $this->widget('site.common.extensions.yii-gravatar.YiiGravatar', array(
                          'email'=>$user->email,
                          'size'=>100,
                          'defaultImage'=>'mm',
                          'secure'=>true,
                          'rating'=>'pg',
                          'emailHashed'=>md5,
                     ));
        }
    }

这是我得到的错误

User and its behaviors do not have a method or closure named "widget". 

在我看来,你应该从一个扩展调用模型,而不是从另一个方向调用:

例如,在/extensions/Gravatar/Gravatar.php中,您可以使用getAvatar()代码创建一个函数init(),然后加载其他小部件(http://www.yiiframework.com/forum/index.php/topic/25678-load-widget-from-inside-widget/)

我就是这样做的:1个新的自定义扩展,将所有内容都加载到位。