2014-10-30 47 views
0

在我的應用程序中,我有一個表單來創建ModelA的實例。Yii - 在另一個模型控制器上創建模型動作

但是,當我提交此表單時,我還想創建一個ModelB的實例,其中包含來自表單提交的數據。但是,提交後,我想顯示創建ModelA的視圖。總之,我想ModelB默默創建。

我試圖調用的ModelBactionCreate()BactionCreate()方法,通過創建ModelAactionCreate()內部控制器B的一個實例的做法。然而這對我來說並不合適。

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, 
    )); 
} 

另一種方法是直接在ModelA的actionCreate方法中創建並保存ModelB。但是這也看起來不正確,因爲存在代碼重複,並且由於用戶許可操作規則,它是潛在危險的。

我的問題是:有沒有更好的方法,或建議這樣做的方法?如何以安全高效的方式創建ModelB

謝謝

回答

0

在一個控制器動作中創建多個模型沒有任何問題。如果你有所有必要的數據來實例化ModelB in actionCreate action,繼續做吧。但是,你的話「默默地創造」使我認爲你正在試圖解決一些可以更有效地解決的問題,而不需要將這兩種模型聯繫起來。

只是一個例子 - 當一個新用戶註冊時,你想給他發送一封歡迎郵件。您可以在控制器中硬編碼該行爲,但更優雅的解決方案是使用Yii的內置機制events。但這只是一個猜測,當然。

+0

謝謝。看着它。 :) – MobileCushion 2014-10-30 15:53:30

相關問題