У меня есть две модели: 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?