Yii2 - 在同一个活动形式上使用同一类的多个模型

时间:2017-06-24 00:37:09

标签: php yii2 active-form

按照http://www.yiiframework.com/wiki/666/handling-tabular-data-loading-and-validation-in-yii-2/的说明,我完成了以下操作:

在我的控制器中,我传入了一个数组$ accessibleDepts,其中包含DeptEmployee类的模型数组。

在我看来,我将这些模型添加到我的活动表单中,如下所示:

foreach($accessibleDepts as $i=>$accessibleDept){
    echo '<br>';
    echo '<h5>' . $accessibleDept->deptGroupName . '</h5>';
    echo $form->errorSummary($accessibleDept); 


    echo $form->field($accessibleDept, '[$i]ACTIVE_FLAG')->checkbox(['value'=>-1]);
    echo $form->field($accessibleDept, '[$i]DEPT_START')->textInput(['readonly'=>false, 'class' => 'datepicker']); 
    echo $form->field($accessibleDept, '[$i]COMMENTS')->textarea(['readonly'=>false, 'style' => 'width:500px; height:150px']); 
}

如果我在$ accessibleDepts中传入两个模型,我会看到我的表单上显示的两个模型都是我期望的。但是,当我将表单作为post请求提交时,我发现我为DeptEmployee类模型发送的post对象仅包含第二个模型。

看起来像是

[
    '$i' => [
        'ACTIVE_FLAG' => '-1',
        'DEPT_START' => '23-JUN-2017',
        'COMMENTS' => 'TEST COMMENT',
    ]
]

我不确定为什么$ i没有在这里转换为索引,似乎只保留了DeptEmployee类的最后一个模型并将其发送回控制器。

$ accessibleDepts数组是在我的控制器中创建的,如此

$deptEmployeeQuery = DeptEmployee::find()->where(['EMP_ID'=>$emp_id]);
if($deptEmployeeQuery->count() > 0){
    $deptEmployeeArray = $deptEmployeeQuery->all();
}

foreach($deptEmployeeArray as $deptRecord){
    if ($this->authModel->hasAccessToDeptGroup($deptRecord['DEPT_GROUP_ID']))
        $accessibleDepts[] = $deptRecord;
}

if(DeptEmployee::loadMultiple($accessibleDepts, Yii::$app->request->post())){
    return $this->render('success');
}

有谁知道这里的问题是什么?

1 个答案:

答案 0 :(得分:2)

您应该更改view,如下所示:

foreach($accessibleDepts as $i=>$accessibleDept){
    echo '<br>';
    echo '<h5>' . $accessibleDept->deptGroupName . '</h5>';
    echo $form->errorSummary($accessibleDept); 


    echo $form->field($accessibleDept, "[$i]ACTIVE_FLAG")->checkbox(['value'=>-1]);
    echo $form->field($accessibleDept, "[$i]DEPT_START")->textInput(['readonly'=>false, 'class' => 'datepicker']); 
    echo $form->field($accessibleDept, "[$i]COMMENTS")->textarea(['readonly'=>false, 'style' => 'width:500px; height:150px']); 
}

单引号将压缩要解释的变量。有关详细信息,请访问What is the difference between single-quoted and double-quoted strings in PHP?