@Heckfy325
Начинающий программист. Простите за глупые вопросы

Почему не загружается путь к картинке в таблицу yii2?

Есть два поля (паспорт и диплом), пользователь будет отправлять свой паспорт и диплом на сайт, соответственно картинки сохраняются на сервере и путь к картинкам сохраняется в таблицу бд. Пытался это реализовать, в итоге картинки на сервер сохраняются, а в таблицу ничего путь путь не записывается.

Форма:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'passport')->fileinput()->label(false) ?>
<?= $form->field($model, 'diploma')->fileinput()->label(false) ?>
<?= Html::submitButton('Отправить') ?>
<?php ActiveForm::end() ?>


Модель:
public function rules()
    {
        return [  
            [['passport', 'diploma'], 'file', 'extensions' => 'png, jpg'],
        ];
    }


Контроллер:
public function actionCreate()
    {
        $model = new Clients();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->save()) {
                $model->passport = UploadedFile::getInstance($model, 'passport');
                $model->diploma = UploadedFile::getInstance($model, 'diploma');
                $path = 'img/store/' . $model->id_cart . '/';
                FileHelper::createDirectory($path);
                if ($model->passport) {
                    $file = $path . $model->passport->baseName . '.' . $model->passport->extension;
                    $model->passport->saveAs($file);
                }
                if ($model->diploma) {
                    $file = $path . $model->diploma->baseName . '.' . $model->diploma->extension;
                    $model->diploma->saveAs($file);
                }

                Yii::$app->session->setFlash('success', 'Спасибо, мы получили вашу анкету. В скором времени мы с вами свяжемся. Ваш ID Анкеты - '
                    . $model->id_cart
                    . ". Вы можете проверит статус своей анкеты в разделе - <a href='/card'>Моя анкета</a> ");
            } else {
                Yii::$app->session->setFlash('error', 'Ошибка... Попробуйте еще раз...');
            }
            return $this->refresh();
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
Наверное потому что $model->passport и $model->diploma присваиваются после $model->save(), а потом $model->save() уже нету.
Ответ написан
Decadal
@Decadal
У вас модель странная. Она хранит инстансы файлов, а не их пути. Во первых перед сохранением модели стоит поверить, все ли хорошо с файлами, а во вторых в поля модели надо записывать строки с путями к картинкам явно. Yii не сделает из файла-объекта строку.
Кстати лучше было бы разбить это на две модели - собственно, модель для файлов, которая наследуется от yii base model. И модель для клиентов, которая наследуется от active record и содержит поля diploma_img_path and passport_img_path
Ответ написан
Комментировать
@Heckfy325 Автор вопроса
Начинающий программист. Простите за глупые вопросы
public function actionCreate()
    {
        $model = new Clients();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->save()) {
                $model->passport = UploadedFile::getInstance($model, 'passport');
                $model->diploma = UploadedFile::getInstance($model, 'diploma');
                $path = 'img/store/' . $model->id_cart . '/';
                FileHelper::createDirectory($path);
                if ($model->passport) {
                    $model->save(false);
                    $file = $path . $model->passport->baseName . '.' . $model->passport->extension;
                    $model->passport->saveAs($file);
                }
                if ($model->diploma) {
                    $model->save(false);
                    $file = $path . $model->diploma->baseName . '.' . $model->diploma->extension;
                    $model->diploma->saveAs($file);
                }

                Yii::$app->session->setFlash('success', 'Спасибо, мы получили вашу анкету. В скором времени мы с вами свяжемся. Ваш ID Анкеты - '
                    . $model->id_cart
                    . ". Вы можете проверит статус своей анкеты в разделе - <a href='/card'>Моя анкета</a> ");
            } else {
                Yii::$app->session->setFlash('error', 'Ошибка... Попробуйте еще раз...');
            }
            return $this->refresh();
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы