В моем приложении у меня есть форма для создания экземпляра ModelA
,
Однако, когда я отправляю эту форму, я также хочу создать экземпляр ModelB
с данными, которые поступают из формы отправки. Однако после отправки я хочу показать вид созданного ModelA
, Короче хочу ModelB
быть созданным молча.
Я попробовал подход звонка actionCreate()
из ModelB
в actionCreate()
метод B
, создав экземпляр контроллера B
внутри ModelA
«s actionCreate()
, Однако это не кажется мне правильным.
public function actionCreate(){
$model = new ModelA;
if(isset($_POST['ModelA'])) {
$model->attributes = $_POST['ModelA'];
$modelB = new ModelB("create");
$res = $modelB->actionCreate();
if($res && $model->save()){
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
}
Другой подход заключается в создании и сохранении ModelB непосредственно в методе actionCreate ModelA. Но это также не кажется правильным, так как есть повторение кода, и это потенциально опасно из-за правил действий разрешения пользователя.
Мой вопрос: есть ли лучший подход или подход, который рекомендуется сделать это? Как я могу создать ModelB
на стороне безопасным и эффективным способом?
Спасибо
Нет ничего плохого в создании нескольких моделей в одном действии контроллера. Если у вас есть все необходимые данные для создания экземпляра ModelB в actionCreate действие, идти вперед и сделать это. Но твои слова «создай это молча» заставляют меня думать, что ты пытаешься решить какую-то проблему, которая может быть решена более эффективно, не сильно объединяя эти две модели.
Просто пример — когда новый пользователь регистрируется, вы хотите отправить ему приветственное письмо. Вы можете жестко закодировать это поведение прямо в контроллере, но более элегантным решением было бы использование встроенного механизма Yii: События. Но это только предположение, конечно.
Других решений пока нет …