Yii User + Rights: Не работает редактирование пользователем (не админом!) данных своего профиля
Если в нашем приложении на Yii одновременно установлены модули Yii User и Rights, то сталкиваемся с проблемой, что пользователь не может сохранить свои данные после их редактирования (/user/profile/edit). Редактирование под админом работает хорошо (user/admin/edit).
При этом всё работает хорошо, когда установлен модуль Yii User (yii-user) без Rights.
Когда же установили Rights, то при нажатии пользователем кнопки "Сохранить" после редактирования своих данных (своего профиля), получаем ошибку:
CException
RWebUser and its behaviors do not have a method or closure named "updateSession".
/Users/macbook/Sites/YiiRoot/framework/base/CComponent.php(266)
254 public function __call($name,$parameters) 255 { 256 if($this->_m!==null) 257 { 258 foreach($this->_m as $object) 259 { 260 if($object->getEnabled() && method_exists($object,$name)) 261 return call_user_func_array(array($object,$name),$parameters); 262 } 263 } 264 if(class_exists('Closure', false) && $this->canGetProperty($name) && $this->$name instanceof Closure) 265 return call_user_func_array($this->$name, $parameters); 266 throw new CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".', 267 array('{class}'=>get_class($this), '{name}'=>$name))); 268 } 269 270 /** 271 * Returns the named behavior object. 272 * The name 'asa' stands for 'as a'. 273 * @param string $behavior the behavior name 274 * @return IBehavior the behavior object, or null if the behavior does not exist 275 */ 276 public function asa($behavior) 277 { 278 return isset($this->_m[$behavior]) ? $this->_m[$behavior] : null;
Скрин экрана:
или по русски:
В чём дело? Разбираемся.
При установке модуля Rights мы заменяли настройку в конфиге, относящуюся к 'user' (WebUser на RWebUser):
'components'=>array( 'user'=>array( 'class'=>'RWebUser', 'allowAutoLogin'=>true, 'loginUrl' => array('/user/login'), ),
И теперь получаем ошибку, что в классе RWebUser не найден метод "updateSession". Понимаем, что он необходим для модуля yii-user и, должно быть, присутствовал в классе WebUser.
Так и есть.
Возможных выхода – два:
1. Добавить функцию updateSession() из /modules/user/components/WebUser.php в компонент /modules/rights/components/RWebUser.php
public function updateSession() { $user = Yii::app()->getModule('user')->user($this->id); $userAttributes = CMap::mergeArray(array( 'email'=>$user->email, 'username'=>$user->username, 'create_at'=>$user->create_at, 'lastvisit_at'=>$user->lastvisit_at, ),$user->profile->getAttributes()); foreach ($userAttributes as $attrName=>$attrValue) { $this->setState($attrName,$attrValue); } }
class RWebUser extends CWebUser
на:
class RWebUser extends WebUser
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
- 0 Twitter Bootstrap Carousel Crossfade (09.09.2013)
3 комментариев