Php Yii-在另一个模型控制器操作上创建模型

Php Yii-在另一个模型控制器操作上创建模型,php,yii,yii2,yii-components,Php,Yii,Yii2,Yii Components,在我的应用程序中,我有一个表单来创建ModelA的实例 但是,当我提交此表单时,我还希望使用表单提交中的数据创建一个ModelB实例。但是,在提交之后,我想显示创建的ModelA的视图。简而言之,我希望以静默方式创建ModelB 我尝试了在actionCreate()方法中调用actionCreate()模型B的actionCreate()的方法,方法是在ModelA的actionCreate()内部创建一个ControllerB实例。然而,这对我来说似乎并不正确 public function

在我的应用程序中,我有一个表单来创建
ModelA
的实例

但是,当我提交此表单时,我还希望使用表单提交中的数据创建一个
ModelB
实例。但是,在提交之后,我想显示创建的
ModelA
的视图。简而言之,我希望以静默方式创建
ModelB

我尝试了在
actionCreate()
方法中调用
actionCreate()
模型B的
actionCreate()
的方法,方法是在
ModelA
actionCreate()
内部创建一个Controller
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


谢谢

在一个控制器操作中创建多个模型没有什么错。如果您拥有在actionCreate操作中实例化ModelB所需的所有数据,请继续并执行。但是你说的“默默地创造”让我觉得你在试图解决一些问题,这些问题可以更有效地解决,而不需要将这两个模型耦合太多


举个例子——当一个新用户注册后,你想给他发送一封欢迎电子邮件。您可以在控制器中对该行为进行硬编码,但更优雅的解决方案是利用Yii的内置操作机制。当然,这只是猜测。

谢谢。调查它。:)