Yii2 - 在同一个 activeform 上使用相同 class 的多个模型
Yii2 - Using multiple models of same class on the same activeform
按照 http://www.yiiframework.com/wiki/666/handling-tabular-data-loading-and-validation-in-yii-2/ 的说明,我完成了以下操作:
我从我的控制器传入一个数组 $accessibleDepts,其中包含 class 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 class 模型发送的 post 对象仅包括第二个模型。
看起来像
[
'$i' => [
'ACTIVE_FLAG' => '-1',
'DEPT_START' => '23-JUN-2017',
'COMMENTS' => 'TEST COMMENT',
]
]
我不确定为什么 $i 在这里没有被转换为索引,似乎只有 class 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');
}
有人知道这里的问题是什么吗?
您应该如下更改 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?
按照 http://www.yiiframework.com/wiki/666/handling-tabular-data-loading-and-validation-in-yii-2/ 的说明,我完成了以下操作:
我从我的控制器传入一个数组 $accessibleDepts,其中包含 class 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 class 模型发送的 post 对象仅包括第二个模型。
看起来像
[
'$i' => [
'ACTIVE_FLAG' => '-1',
'DEPT_START' => '23-JUN-2017',
'COMMENTS' => 'TEST COMMENT',
]
]
我不确定为什么 $i 在这里没有被转换为索引,似乎只有 class 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');
}
有人知道这里的问题是什么吗?
您应该如下更改 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?