Виджет Данных Пользователя

Делаю виджет, который отображается на всех страницах для авторизованных пользователей.

В нем требуется выводить аватарку, имя, роль (юзер/админ и т.п.) и прочую информацию из профиля. Вопрос в том, откуда будет грамотно брать эти данные. Я пока вижу 2 варианта: загрузка модели или get/setState. Как лучше сделать и какие еще варианты возможны?

Также в будущем планируется добавить уведомления (личные сообщения, комментарии и т.п.), тут уж точно без запросов не обойтись.

  1. Берем пользователя:



Yii::app()->user



  1. Берем роль пользователя. Думаю это проблем не составит. В стандартном RBAC есть getRoles() ну или просто выборку сделать из таблички асигнов.

  2. Информацию из профиля, аватарку и т.п. выбираем из таблички с профилями пользователей.

Yii::app()->user->id собственно id пользователя. Тут проблем не вижу пока.

Есть насколько я знаю уже готовое расширение/модуль с данным функционалом (личный кабинет и т.п.), но оно сыровато. Возможно проще взять его и допилить?

http://www.yiiframework.com/extension/yii-user-management/

Если еще будут вопросы спрашивайте.

Т.е. вы предлагаете загружать модель в виджете, правильно?

http://www.yiiframework.com/doc/blog/1.1/en/portlet.menu здесь отлично расписан процесс создания своего виджета.

Собственно говоря вы реализуете init() и будете делать рендер вьюшки в виджете. В самой же вьюшке вы можете обратится к методу модели, например User::getAvatar(), и так далее, и вывести весь нужный контент таким образом. Далее там куда вам нужно вставить этот контент( в layout/column2 например) зовите свой виджет.

Что в данном случае означает загружать модель, я не очень понимаю. Yii::app()->user - это обьект класса CWebUser, который в свою очередь выдает информацию из сессии по текущему пользователю. Отсюда вы можете взять например id пользователя (Yii::app()->user->id), а далее вывести все остальное довольно просто, реализуйте методы в моделях которые будут возвращать вам то что нужно (например User::getAvatar(), который вернет CHtml::image() и т.д.), и заполняйте этим view для виджета.