Fatal error: Call to a member function delete() on a non-object in protected/controllers/SiteController.php on line 117
Это связано с тем, что сначала пользователь зарегистрировался через обычную форму регистрации
А затем пытается зарегистрироваться через социальную сеть, в аккаунте которой указан такой же email, какой был указан в форме регистрации.
Чтобы выдавать более дружелюбную ошибку ("такой email уже занят") вместо Fatal Error, откройте файл protected/controllers/SiteController.php и метод
- Код: Выделить всё
public function createUser($email, $username = '', $phone = '', $activateKey = '', $isActive = false) {
$model = new User;
$model->email = $email;
if ($username)
$model->username = $username;
if ($phone)
$model->phone = $phone;
if ($isActive)
$model->active = 1;
if ($activateKey)
$model->activatekey = $activateKey;
$password = $model->randomString();
$model->setPassword($password);
$return = array();
if($model->save()){
$return = array(
'email' => $model->email,
'username' => $model->username,
'password' => $password,
'id' => $model->id,
'active' => $model->active,
'activateKey' => $activateKey,
'activateLink' => Yii::app()->createAbsoluteUrl('/site/activation?key='.$activateKey),
);
}
return $return;
}
замените на:
- Код: Выделить всё
public function createUser($email, $username = '', $phone = '', $activateKey = '', $isActive = false) {
$model = new User;
$model->email = $email;
if ($username)
$model->username = $username;
if ($phone)
$model->phone = $phone;
if ($isActive)
$model->active = 1;
if ($activateKey)
$model->activatekey = $activateKey;
$password = $model->randomString();
$model->setPassword($password);
$return = array();
if ($model->save()) {
$return = array(
'email' => $model->email,
'username' => $model->username,
'password' => $password,
'id' => $model->id,
'active' => $model->active,
'activateKey' => $activateKey,
'activateLink' => Yii::app()->createAbsoluteUrl('/site/activation?key=' . $activateKey)
);
}
else {
$errors = $model->getErrors();
if ($errors) {
foreach($errors as $error) {
if ($error && is_array($error)) {
foreach($error as $item) {
echo '<div class="alert alert-block alert-error fade in">'.$item.'</div>';
}
}
}
}
exit;
}
return $return;
}
т.е добавили условие else, в котором будет выводится ошибка "email уже занят".