Как обновлять модель в форме?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Trent
Сообщения: 10
Зарегистрирован: 2019.04.25, 08:43

Как обновлять модель в форме?

Сообщение Trent » 2019.06.02, 14:56

Есть несколько моделей, заполняющихся в одной форме - Организация, которая может иметь несколько адресов, телефонов и к которой должны быть прикреплены документы о регистрации.

Метод Create всё нормально, всё заполняется, всё прикрепляется, всё сохраняется

Код: Выделить всё

public function actionCreate() {
        $model = new Organization(); 
        $modelOrganizationAddress = new OrganizationAddress();
        $modelOrganizationPhone = new OrganizationPhone();
        $license = new UploadLicenseForm();


        if ($model->load(Yii::$app->request->post()) &&
                           $modelOrganizationAddress->load(Yii::$app->request->post()) &&
                $modelOrganizationPhone->load(Yii::$app->request->post()) &&
                $license->load(Yii::$app->request->post()) &&
                $model->save()) {              
            $modelOrganizationAddress->organization_id = $model->id;
            $modelOrganizationPhone->organization_id = $model->id;
        
            $this->saveAddress($modelOrganizationAddress);
            $this->savePhone($modelOrganizationPhone);
            $license->licenseFiles = UploadedFile::getInstances($license, 'licenseFiles');
            if ($license->upload($modelOrganizationLang)) {
                Yii::$app->session->setFlash('success', "Организация сохранена");
            }

            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
                    'model' => $model,
                            'modelOrganizationAddress' => $modelOrganizationAddress,
                    'modelOrganizationPhone' => $modelOrganizationPhone,
                    'license' => $license
        ]);
    }
Хотелось бы иметь возможность редактировать это всё с помощью actionUpdate

Код: Выделить всё

public function actionUpdate($id) {
        $model = $this->findModel($id);
          $modelOrganizationAddress = OrganizationAddress::find()->where(['organization_id' => $id])->all();
        $modelOrganizationPhone = OrganizationPhone::find()->where(['organization_id' => $id])->all();
                
      $license->scenario = 'update-photo-upload';
        if ($model->load(Yii::$app->request->post()) &&
                   $modelOrganizationAddress->load(Yii::$app->request->post()) &&
                $modelOrganizationPhone->load(Yii::$app->request->post()) &&
                $model->save()) {
//            $license->licenseFiles = UploadedFile::getInstances($license, 'licenseFiles');
                     $modelOrganizationAddress->organization_id = $model->id;
            $modelOrganizationPhone->organization_id = $model->id;

         

            $this->saveAddress($modelOrganizationAddress);
            $this->savePhone($modelOrganizationPhone);
            $license->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            if ($license->upload()) {
                   Yii::$app->session->setFlash('success', "Организация обновлена");
              
            }
            return $this->redirect(['view', 'id' => $model->id]);
        }
Всё это у меня в форме, с помощью Multiple Input

Код: Выделить всё

  <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
    <?= $form->errorSummary($model); ?>
    <?=
    $form->field($model, 'status')->dropDownList([
        '0' => 'Отключена',
        '1' => 'Активна',
    ]);
    ?>
    <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'full_name')->textInput(['maxlength' => true]) ?>



    <?php
    echo $form->field($modelOrganizationAddress, 'address')->label(HModule::t('organization', 'Address'))->widget(MultipleInput::className(), [
        'max' => 4,
        'columns' => [
            [
                'name' => 'country',
                'title' => HModule::t('organization', 'Country'),
                'options' => [
                    'class' => 'input-priority'
                ],
        ],
            [
                'name' => 'city',
                'title' => HModule::t('organization', 'City'),
                'options' => [
                    'class' => 'input-priority'
                ],
            
            ],
            [
                'name' => 'street',
                'title' => HModule::t('organization', 'Street'),
                'options' => [
                    'class' => 'input-priority'
                ]
            ],
            [
                'name' => 'building',
                'title' => HModule::t('organization', 'Building'),
                'options' => [
                    'class' => 'input-priority'
                ]
            ],
            [
                'name' => 'zip_code',
                'title' => HModule::t('organization', 'Zip Code'),
                'options' => [
                    'class' => 'input-priority'
                ]
            ]
        ]
    ]);
    ?>
    ...
     <?php echo $form->field($license, 'licenseFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>
Вопрос - как вообще работает update с несколькими заполнеными полями (multiple)?
Я должен передать в _form все адреса, принадлежащие организации:
Страна1, Улица2
Страна2, Улица2
...
Но как это делать, ведь поле то одно?)

Код: Выделить всё

  echo $form->field($modelOrganizationAddress, 'address')->label(HModule::t('organization', 'Address'))->widget(MultipleInput::className(), [
        'max' => 4,
        'columns' => [
            [
                'name' => 'country',
                'title' => HModule::t('organization', 'Country'),
                'options' => [
                    'class' => 'input-priority'
                ],

            ],
            [
                'name' => 'city',
                'title' => HModule::t('organization', 'City'),
                'options' => [
                    'class' => 'input-priority'
                ],
            
            ],
        ...
            [
                'name' => 'zip_code',
                'title' => HModule::t('organization', 'Zip Code'),
                'options' => [
                    'class' => 'input-priority'
                ]
            ]
        ]
    ]);
Как то надо передать какой то массив $items в multiply?

Ответить