单页Yii-PHP中多控制器的多视图

单页Yii-PHP中多控制器的多视图,php,architecture,yii,Php,Architecture,Yii,我在架构师方面遇到了一个问题。我有两个页面的顺序和注册,他们分别使用这些视图和控制器 1.注册(视图)、注册表单(表单模型)和注册控制器(控制器) 2.订单(视图)、订单表单(表单模型)和订单控制器(控制器) 现在的问题是,我有一个新的要求,即在一个页面中显示订单和注册视图。当用户提交时,它将注册用户并在验证后下订单 该需求中的问题是哪个控制器将处理该请求,因为每个视图(注册和订单)都有单独的控制器。 现在我应该做一个新的控制器,然后它将需要代码重复。 请给我建议最好的方法。Yii有一个选项,您

我在架构师方面遇到了一个问题。我有两个页面的顺序和注册,他们分别使用这些视图和控制器

1.注册(视图)、注册表单(表单模型)和注册控制器(控制器)

2.订单(视图)、订单表单(表单模型)和订单控制器(控制器)

现在的问题是,我有一个新的要求,即在一个页面中显示订单和注册视图。当用户提交时,它将注册用户并在验证后下订单

该需求中的问题是哪个控制器将处理该请求,因为每个视图(注册和订单)都有单独的控制器。 现在我应该做一个新的控制器,然后它将需要代码重复。
请给我建议最好的方法。

Yii有一个选项,您可以通过该选项导入/服务在其他控制器中定义的操作

上面的链接详细介绍了在控制器中定义外部操作的过程


所以实质上,,您可以在不复制代码的情况下引用Order Controller中定义的操作。

因此,您的意思是我创建了另一个Controller类,例如OrderRegistrationController扩展了CCController和overide actions方法,并在此处定义这两个控制器所需操作的映射?如果上述操作正确,请在用户单击mergeviewpage时告诉我提交按钮用户提交这两个表单的操作是什么?例如localhost/index.php?r=orderregistration/whataction??不,您创建的两个控制器都很好,据我所知,您希望在一个页面中提供“订单”和“注册”功能。如果我的理解是正确的,您只需要覆盖订单控制器中的actions()方法,使其将“actionRegister()”(我猜)导入订单控制器,然后您可以像最初在注册控制器操作中一样发布到该操作。好的,我理解,我将把RegisterController的'actionRegister'导入OrderController的'action'方法,但现在的问题是哪个操作将呈现combineview.php页面,例如,哪个操作将包含以下语句:$this->render('combineview'数组(“orderform”=>$orderform,“RegisterPerform”=>$RegisterPerform));啊,为此,您需要将所有公共代码移动到单独的函数,或者,您可以将两个表单模型发布到同一个控制器,然后验证它们并相应地保存。