Как связать существующую модель со связанной моделью, которую нужно создать вначале? - PullRequest
0 голосов
/ 12 мая 2019

У меня есть две модели: Message и Quote.Должно быть две функции для связи Message с существующим и новым Quote.Мне не нужно заполнять обе модели в единую форму (как хорошо описано в официальной документации), потому что одна из них всегда существует в соответствии с дизайном, и достаточно использовать ее идентификатор.

В Message контроллер, который я создал, действиекоторые хорошо выполняют первое задание:

    public function actionAssignToQuote($id, $quoteId)
    {
        $message = $this->findModel($id);
        if (($quote = Quotes::findOne($quoteId)) !== null) {
            $message->link('quote', $quote);
        } else {
            throw new NotFoundHttpException(Yii::t('category', 'Quote $quoteId does not exist.'));
        }
        return $this->redirect(['index']);
    }

И это действие просто использовать непосредственно из списка Message.

Но для нового Quote оно должно быть создано (и проверено ранее).спасти).Его контроллер уже имеет действие Create, и, кажется, это хорошее место для повторного использования этого кода.Возможно, я могу передать дополнительный параметр messageId и использовать его внутри Quote action Create, если параметр установлен и не пуст.Меня смущает, что подобные действия, связанные с Message моделью, делятся на разные контроллеры, и чистое действие Create будет содержать некоторый дополнительный код.

UPD теперь действие Create в Quote контроллер выглядит следующим образом:

    public function actionCreate()
    {
        $model = new Quote();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            if ($messageId = Yii::$app->request->get('messageId')) {
                if (($message = Message::findOne($messageId)) !== null) {
                    $message->link('quote', $model);
                    return $this->redirect(['messages/index']);
                } else {
                    throw new NotFoundHttpException(Yii::t('category', 'Message messageId does not exist.'));
                }
            }
            return $this->redirect(['view', 'id' => $model->id]);
        }

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

В основном я хочу понять, какой подход лучше с точки зрения DDD.Если все-таки можно передать необязательные параметры действиям CRUD таким образом для дополнительных действий или я пропустил некоторые готовые решения Yii2?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...