2014-10-30 4 views
0

В моем приложении у меня есть форма для создания экземпляра ModelA.Yii - Создать модель на другом контроллере модели

Однако, когда я отправляю эту форму, я также хочу создать экземпляр 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 от events. Конечно, это только предположение.

+0

спасибо. Вглядываясь в него. :) – MobileCushion

Смежные вопросы