Valonix
@Valonix
Back end / Front end developer

Yii2 регистрация пользователей. Почему не работает save()?

SiteController
public function actionSignup()
    {
        $model = new User();
        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate()) {
                $model->save();
                Yii::$app->session->setFlash('signUpOk');
                return $this->refresh();
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]);
    }

model User унаследован от АктивРекордс как полагается.
class User extends ActiveRecord implements IdentityInterface


Почему когда я отправляю свою форму signup.php вижу с флеш сообщение, что говорит о том, что валидацию я прошел. Но, в базе пусто?
  • Вопрос задан
  • 7153 просмотра
Пригласить эксперта
Ответы на вопрос 3
Terminaft
@Terminaft
У Вас неверная модель. Нужно завести еще одну модель SignupForm (extends yii\base\Model), и в ней уже валидировать поля и сохранять экземпляр User'a в базу данных. Посмотрите как это сделано в advanced шаблоне (регистрация во фронтенде, модель юзера в common).
Ответ написан
Zhuravljov
@Zhuravljov
php-программист
Что-то мешает данным сохраниться, возможно обработчик beforeSave в User.

Флеш-сообщение, по идее, должно быть таким:
Yii::$app->session->setFlash('success', 'signUpOk');


Если валидация уже выполнена, повторно ее делать в save() нет смысла:
Поэтому сохранять нужно так:
if ($model->validate()) {
    $model->save(false);
    //..
}

Или так:
if ($model->save()) {
    //..
}
Ответ написан
Комментировать
Valonix
@Valonix Автор вопроса
Back end / Front end developer
Окей, я понял в чем преимущество. Сейчас попробую добавить... что-то :)
Спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы