좋아, 여기 내 솔루션입니다. 그래서 저는 Room (ActiveRecord), RoomB (Model), RoomC (Model)의 3 가지가 있습니다. 그래서 나는 3 가지 유형의 방을 대표 할 수 있습니다. "Model"클래스의 속성은 "ActiveRecord"클래스의 "id"와 "description"입니다 (우리는 Room에 대해 이야기하고 있음을 기억하십시오). "_form.php"에서 두 개의 "render ('form-rooms')"을 구분 기호를 사용하여 "col-md-4"클래스의 div 안에 넣습니다. 은 "actionCreate"에서
<td>
<div class="row">
<div class="col-md-4">
<?= $this->render('_form-rooms', [
'form' => $form,
'indexHouse' => $indexHouse,
'modelsRoom' => $modelsRoom[$indexHouse],
]) ?>
<button type="button" class="remove-house btn btn-danger btn-xs"><span class="fa fa-minus"></span></button>
</div>
<div class="col-md-4">
<?= $this->render('_form-rooms', [
'form' => $form,
'indexHouse' => $indexHouse,
'modelsRoom' => $modelsRoomB[$indexHouse],
]) ?>
<button type="button" class="remove-house btn btn-danger btn-xs"><span class="fa fa-minus"></span></button>
</div>
<div class="col-md-4">
<?= $this->render('_form-rooms', [
'form' => $form,
'indexHouse' => $indexHouse,
'modelsRoom' => $modelsRoomC[$indexHouse],
]) ?>
<button type="button" class="remove-house btn btn-danger btn-xs"><span class="fa fa-minus"></span></button>
</div>
</div>
</td>
, 내가 2 "모델"clases를 나타내는 2 개 여분의 배열을했습니다, 그래서 그 3 개 배열을 가지고 : $ modelsRoom = [[새 룸]]; $ modelsRoomB = [[새 룸 B]]; $ modelsRoomC = [[새 룸 C]]; "isset ($ _ POST [ 'Room'] [0] [0])"과 같이 두 개의 추가 배열을 사용하여 임시로 "actionCreate"코드의 모든 논리를 변경했습니다. '요청했습니다 "는 isset ($ _ POST ['RoomB '] [0] [0])"및 "는 isset ($ _ POST ['RoomC '] [0] [0])"도 :
// validate person and houses models
$valid = $modelPerson->validate();
$valid = Model::validateMultiple($modelsHouse) && $valid;
$valid2 = $valid3 = $valid;
if (isset($_POST['Room'][0][0])) {
foreach ($_POST['Room'] as $indexHouse => $rooms) {
foreach ($rooms as $indexRoom => $room) {
$data['Room'] = $room;
$modelRoom = new Room;
$modelRoom->load($data);
$modelsRoom[$indexHouse][$indexRoom] = $modelRoom;
$valid = $modelRoom->validate();
}
}
}
if (isset($_POST['RoomB'][0][0])) {
foreach ($_POST['RoomB'] as $indexHouse => $rooms) {
foreach ($rooms as $indexRoom => $room) {
$data['Room'] = $room;
$modelRoom = new Room;
$modelRoom->load($data);
$modelsRoomB[$indexHouse][$indexRoom] = $modelRoom;
$valid2 = $modelRoom->validate();
}
}
}
if (isset($_POST['RoomC'][0][0])) {
foreach ($_POST['RoomC'] as $indexHouse => $rooms) {
foreach ($rooms as $indexRoom => $room) {
$data['Room'] = $room;
$modelRoom = new Room;
$modelRoom->load($data);
$modelsRoomC[$indexHouse][$indexRoom] = $modelRoom;
$valid3 = $modelRoom->validate();
}
}
}
return $this->render('create', [
'modelPerson' => $modelPerson,
'modelsHouse' => (empty($modelsHouse)) ? [new House] : $modelsHouse,
'modelsRoom' => (empty($modelsRoom)) ? [[new Room]] : $modelsRoom,
'modelsRoomB' => (empty($modelsRoomB)) ? [[new RoomB]] : $modelsRoomB,
'modelsRoomC' => (empty($modelsRoomC)) ? [[new RoomC]] : $modelsRoomC,
]);
: 2 추가 "유효"변수는 형태의 렌더링에,
if ($valid && $valid2 && $valid3) {
$transaction = Yii::$app->db->beginTransaction();
try {
if ($flag = $modelPerson->save(false)) {
foreach ($modelsHouse as $indexHouse => $modelHouse) {
if ($flag === false) {
break;
}
... (continue with the same code)
를 계속 사실이 있는지 여부
그래서 나는 내가 만든 여분 배열을 매개 변수로 전달할 한 질문3210
"_form.php"보기에서 위의 코드를 볼 수 있습니다. 두 개의 추가 "_form-rooms"렌더링에서 두 개의 추가 배열을 사용했습니다.
"_form-rooms"에서 "actionUpdate"에서 "Houses"를 모두 제거 했으므로 모델의 ID를 나타내는 코드를 삭제했습니다. 따라서 모든 "rooms"이 삭제됩니다. 너무. 이 후, 나는 "actionCreate"(게시물 이후)에서와 똑같이 수행했습니다.
내 솔루션을 이해하시기 바랍니다. 그것은 아마도 최선의 해결책은 아니지만 그것은 나를 위해 일합니다. 이 회신을 너무 많이하지 않도록 생략 한 자세한 내용이 있지만, 언제나 연락 할 수 있습니다.)
자세한 내용이 필요하면 이메일을 보내주십시오.