nickgri
(Nickgri)
August 21, 2012, 12:44pm
1
Добрый день.
Я новичек в Yii. Пытюсь использовать расширение EAuth.
Совместно использую модуль (yii-user) yii-user.2mx.org
И при авторизации с помощью аккаунта в Google, когда появляется модальное окно возникает ошибка
Fatal error: Call to a member function getAttributes() on a non-object in \protected\modules\user\components\WebUser.php on line 43
Подскажите куда смотреть?
yugenekr
(Yugenekr)
August 22, 2012, 3:54am
2
modules\user\components\WebUser.php on line 43 – Что здесь в коде?
Предположительно - какой-то ожидаемый объект в реальности таковым не является (call to function on a non-object).
nickgri
(Nickgri)
August 22, 2012, 12:41pm
3
Вызов порождающий исключение $user->profile->getAttributes() (line 43)
Функция которая порождает исключение
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);
}
}
во вложении сам файл
yugenekr
(Yugenekr)
August 22, 2012, 1:38pm
4
Так понимаю, $user->profile - это отношение к другой модели?
Как выглядит метод relations() модели $user?
Что возвращает $user->profile при вар_дампе? – по всей видимости, или null, или массив - вместо ожидаемого объекта.
nickgri
(Nickgri)
August 22, 2012, 6:34pm
5
Так понимаю, $user->profile - это отношение к другой модели?
Как выглядит метод relations() модели $user?
/**
* @return array relational rules.
*/
public function relations()
{
$relations = Yii::app()->getModule('user')->relations;
if (!isset($relations['profile']))
$relations['profile'] = array(self::HAS_ONE, 'Profile', 'user_id');
return $relations;
}
файлы модели User и Profile во вложении
Возвращает NULL
yugenekr
(Yugenekr)
August 23, 2012, 3:51am
6
Ну, все логично. Вы загружаете $user у которого нет записи в таблице profile, соответственно $user->profile = null, но никак не объект класса Profile, т.ч. вызов метода getAttributes() выдает соответствующую ошибку.
В таком случае, либо всегда должен быть соответствующий профиль для каждого $user, либо в коде предусмотреть, что профиль не всегда существует, и не вызывать метод $user->profile->getAttributes() в том случае, когда профиля нет.
nickgri
(Nickgri)
August 23, 2012, 8:42am
7
Спасибо большое за помощь.