Yii2 - Использование нескольких моделей одного и того же класса на одной активной форме

Следуя инструкциям на http://www.yiiframework.com/wiki/666/handling-tabular-data-loading-and-validation-in-yii-2/, я сделал следующее:

Со своего контроллера я передал массив $availableDepts, который содержит массив моделей класса 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']); 
}

Если я передаю две модели в $availableDepts, я вижу, что обе модели отображаются в моей форме так, как я ожидаю. Однако, когда я отправляю форму в виде запроса на отправку, я вижу, что объект отправки, который я отправляю для моделей класса DeptEmployee, включает только вторую модель.

Это выглядит как

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

Я не уверен, почему $ i здесь не преобразуется в индекс, похоже, что только последняя модель класса DeptEmployee сохраняется и отправляется обратно в контроллер.

Массив $availableDepts создается в моем контроллере следующим образом

$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 ответ

Решение

Вы должны изменить свой 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']); 
}

Одиночные кавычки будут подавлять переменные для интерпретации. Для более подробной информации, вы можете перейти к разделу. В чем разница между одинарными и двойными кавычками в PHP?

Другие вопросы по тегам