16

Yii如何创建多模型表单?我搜索了 Yii 的整个文档,但没有得到有趣的结果。有人可以给我一些方向或想法吗?任何帮助都将是可观的。

4

4 回答 4

19

在我的经验中,我得到了这个解决方案并且可以快速理解

您有两个模型来收集您希望收集的数据。让我们说PersonVehicle

第一步:设置输入表单的控制器

在您的控制器中创建模型对象:

public function actionCreate() {

  $Person = new Person;
  $Vehicle = new Vehicle;

  //.. see step nr.3

  $this->render('create',array(
        'Person'=>$Person,
        'Vehicle'=>$Vehicle)
  );
}

第 2 步:编写视图文件

//..define form
echo CHtml::activeTextField($Person,'name');
echo CHtml::activeTextField($Person,'address');
// other fields..

echo CHtml::activeTextField($Vehicle,'type');
echo CHtml::activeTextField($Vehicle,'number');

//..enter other fields and end form

在您的视图中放置一些标签和设计;)

第 3 步:编写控制器on $_POST动作

现在回到您的控制器并为 POST 操作编写功能

if (isset($_POST['Person']) && isset($_POST['Vehicle'])) {
    $Person = $_POST['Person']; //dont forget to sanitize values
    $Vehicle = $_POST['Vehicle']; //dont forget to sanitize values
    /*
        Do $Person->save() and $Vehicle->save() separately
        OR
        use Transaction module to save both (or save none on error) 
        http://www.yiiframework.com/doc/guide/1.1/en/database.dao#using-transactions
    */
}
else {
    Yii::app()->user->setFlash('error','You must enter both data for Person and Vehicle');
 // or just skip `else` block and put some form error box in the view file
}
于 2011-07-17T09:41:50.980 回答
3

你可以在这两篇 Yii wiki 文章中找到一些例子:

于 2011-07-24T07:02:05.960 回答
2

您不需要多模型。正确使用 MVC 模式需要一个反映您的 UI 的模型。

要解决这个问题,您必须使用 CFormModel 而不是 ActiveRecord 将数据从 View 传递到 Controller。然后在您的控制器中,您将解析模型,CFormModel 一个,并使用 ActiveRecord 类(多个)保存在数据库中。

Yii 权威指南中的表单概述表单模型章节包含一些细节和示例。

于 2011-07-17T04:50:27.573 回答
1

另一个建议——

我们也可以使用Wizard Behavior,它是简化多步骤表单处理的扩展。我们可以在其中使用多模型表单进行注册流程或其他。

演示 - http://wizard-behavior.pbm-webdev.co.uk/

于 2014-10-17T11:36:40.593 回答