Добрый день. От меня много вопросов, но ничего не поделаешь (
Есть несколько моделей, заполняющихся в одной форме - Организация, которая может иметь несколько адресов, телефонов и к которой должны быть прикреплены документы о регистрации.
Метод 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?
Каюсь, что, может, это есть в
документации , но мне не совсем понятно, как "попадает" в форму уже заполненные значения:
Call to a member function formName() on array
, ну так я и получаю да, массив объектов
P.S. Надеюсь, что на тостере не банят за дублирование вопросов на разных ресурсах