2014-10-30 49 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

相关问题