Yii — Создать модель на другой модели действия контроллера

В моем приложении у меня есть форма для создания экземпляра 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 на стороне безопасным и эффективным способом?

Спасибо

0

Решение

Нет ничего плохого в создании нескольких моделей в одном действии контроллера. Если у вас есть все необходимые данные для создания экземпляра ModelB в actionCreate действие, идти вперед и сделать это. Но твои слова «создай это молча» заставляют меня думать, что ты пытаешься решить какую-то проблему, которая может быть решена более эффективно, не сильно объединяя эти две модели.

Просто пример — когда новый пользователь регистрируется, вы хотите отправить ему приветственное письмо. Вы можете жестко закодировать это поведение прямо в контроллере, но более элегантным решением было бы использование встроенного механизма Yii: События. Но это только предположение, конечно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]