【问题标题】:YII model to handle more than one tableYII 模型处理多个表
【发布时间】:2012-10-30 09:38:20
【问题描述】:

我正在 YII 中开发一个注册表单。在我的表格中,有一个单选选项可以选择注册为模式 1 或注册为模式 2。如果用户选择mode1,数据应该输入到table1或者应该输入到table2。 在 YII 中,每个模型处理一张表。这里我的表单处理两个表。

那么如何处理这样的表单来验证和输入数据到 YII 的表中呢?

【问题讨论】:

    标签: php database activerecord yii


    【解决方案1】:

    最简单的方法是为表单创建一个模型(假设它们具有相同的字段?) 此类将扩展 CFormModel(在下面的示例中,我将此模型称为 GlobalFormModel

    此模型将具有与其他两个模型相同的属性,以及一个名为 mode 的新属性 提交表单后,在控制器中您可以根据哪种模式处理它并根据正确的模型对其进行验证,例如:

    $model = new GlobalFormModel
    
    if(isset($_POST['GlobalFormModel'])){
        $model->attributes = $_POST['GlobalFormModel']; 
    
        if ($model->mode == 1){
            $newmodel = new FormOne;
            $newmodel->attributes = $model->attributes;
        } else {
             $newmodel = new FormTwo;
             $newmodel->attributes = $model->attributes;
        } 
    
        ... // validate and save $newmodel
    }
    
    $this->render("yourview",array("model"=>$model));
    

    FormOne 是与第一个表关联的模型,FormTwo 与第二个表关联。首先,您创建 GlobalFormModel 的一个新实例(传递给视图)。您检查表单是否已提交(您可以在此处或在加载两个模型之一后验证它,这是您的选择)。您检查模式,然后加载正确的模型。

    【讨论】:

    • 所以,我不想在 GlobalFormModel 中指定规则(其他两个模型中指定的规则就足够了),不是吗?
    • 您可以为其中一个模型添加一个附加属性,例如 FormOne,(他是您将传递给视图的模型)。提交表单后,您可以检查该属性值是什么,并将模型更改为 FormTwo 或保留 FormOne。是一样的,只是不那么“传统”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多