Делаю виджет, который отображается на всех страницах для авторизованных пользователей.
В нем требуется выводить аватарку, имя, роль (юзер/админ и т.п.) и прочую информацию из профиля. Вопрос в том, откуда будет грамотно брать эти данные. Я пока вижу 2 варианта: загрузка модели или get/setState. Как лучше сделать и какие еще варианты возможны?
Также в будущем планируется добавить уведомления (личные сообщения, комментарии и т.п.), тут уж точно без запросов не обойтись.
Берем роль пользователя. Думаю это проблем не составит. В стандартном RBAC есть getRoles() ну или просто выборку сделать из таблички асигнов.
Информацию из профиля, аватарку и т.п. выбираем из таблички с профилями пользователей.
Yii::app()->user->id собственно id пользователя. Тут проблем не вижу пока.
Есть насколько я знаю уже готовое расширение/модуль с данным функционалом (личный кабинет и т.п.), но оно сыровато. Возможно проще взять его и допилить?
Собственно говоря вы реализуете init() и будете делать рендер вьюшки в виджете. В самой же вьюшке вы можете обратится к методу модели, например User::getAvatar(), и так далее, и вывести весь нужный контент таким образом. Далее там куда вам нужно вставить этот контент( в layout/column2 например) зовите свой виджет.
Что в данном случае означает загружать модель, я не очень понимаю. Yii::app()->user - это обьект класса CWebUser, который в свою очередь выдает информацию из сессии по текущему пользователю. Отсюда вы можете взять например id пользователя (Yii::app()->user->id), а далее вывести все остальное довольно просто, реализуйте методы в моделях которые будут возвращать вам то что нужно (например User::getAvatar(), который вернет CHtml::image() и т.д.), и заполняйте этим view для виджета.