@edvardpotter

Надо ли в yii2 создавать модели для форм?

Давно мучает этот вопрос, стоил ли создавать например модель Singup(как например эта), если можно использовать основную модель User:

public function actionSignup()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new User();        
        if ($model->load(Yii::$app->request->post())) {
            $model->setPassword($model->password);
            if ($model->save()) {
                if (Yii::$app->getUser()->login($model)) {
                    return $this->goHome();
                }
            }
        }

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


Вместо:

public function actionSignup()
    {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }
        return $this->render('signup', [
            'model' => $model,
        ]);
    }
  • Вопрос задан
  • 910 просмотров
Решения вопроса 1
Insolita
@Insolita
Отчаянная домохозяйка
- Формы более переносимы и переиспользуемы
- Формы могут быть не завязаны на аттрибуты модели и лучше выражать предметную область
- Формы проще тестировать
- С использованием форм проще вести разработку в команде
- Валидация в моделях нарушает принципы SOLID (AR их в принципе нарушает, но хотябы эту часть можно нивелировать)
- Для элементарного CRUD с минимальной бизнес-логикой можно обойтись, но если на модель завязано много логики и сценарии будут разрастаться - модель быстро превратится в божественный объект
- Лепить все валидации в одну форму-модель ничуть не лучше, чем лепить их в Ар-модель -> для каждого кейса отдельная модель-форма
-------------------
Резюме: Используйте валидацию в моделях со сценариями, пока не поймёте для чего нужны формы. Использование ради использования, без осознания - всё равно бессмысленно и беспощадно
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Sassoft
@Sassoft
Yii developer
Модели только тонкие AR классы с атрибутами без валидации.
Формы это вход и валидация.
Используйте принцип SRP, формы должны валидировать данные, сущность AR хранить просто поля.
Ответ написан
Комментировать
@Impeeeery
жуй. куй.
не для "конкретных целей", а для форм. да, надо.
уже не помню чем именно было убого, когда при регистрации нет модели формы, но чем-то точно убого.
но если у вас все и так в порядке, то пока ограничьтесь User, потом перекинете если что.
Ответ написан
@BorisKorobkov
Web developer
стоил ли создавать например модель Singup

Лучше User со scenario
$model = new User;
$model->scenario = User::SCENARIO_LOGIN;

$model = new User;
$model->scenario = User::SCENARIO_REGISTER;


www.yiiframework.com/doc-2.0/guide-structure-model...
Ответ написан
Ваш ответ на вопрос

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

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