Загрузка файла на сервер

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Adigezalov
Сообщения: 51
Зарегистрирован: 2017.10.14, 23:52

Загрузка файла на сервер

Сообщение Adigezalov »

Всем привет.
Пробую сделать загрузку файла на сервер из формы на сайте.
Всю информацию пользователь заполняет в поля:

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

$form = ActiveForm::begin([]);
    echo $form->field($review, 'author_name')->textInput(['placeholder' => 'Ваше имя...', 'class' => 'form-control'])->label(false);
    echo $form->field($review, 'text')->textarea(['placeholder' => 'Отзыв...', 'class' => 'form-control'])->label(false);
    echo $form->field($review, 'vk')->textInput(['placeholder' => 'Ссылка на VK...', 'class' => 'form-control'])->label(false);
    echo $form->field($review, 'photo')->fileInput(['placeholder' => 'Ваше фото', 'class' => 'form-control'])->label(false);
    echo Html::submitButton('Отправить отзыв', ['class' => 'btn button']);
    ActiveForm::end();
В контроллере:

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

if ($review->load(Yii::$app->request->post())) {
            if ($review->save()) {
                $file = UploadedFile::getInstance($review, 'photo');
                $review -> uploadFile($file);
            }

        }
В модели:

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

public function uploadFile(UploadedFile $file)
    {
        $file->saveAs( '@web/uploads/' . $file->name);
    }
После заполнения всех полей и нажатии на "Отправить" выдает ошибку:

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

move_uploaded_file(@web/uploads/ava_1.png): failed to open stream: No such file or directory
при этом запись в базе создается (но пока без имени файла)

Как с этим бороться?
Понимаю, что ошибка означает, что пути или файла нет, но ведь они есть)
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Загрузка файла на сервер

Сообщение Nex-Otaku »

Нет таких путей в файловой системе со знаком "@", это алиасы, ты должен их перевести в "настоящие" пути.

Я делаю так:

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

// Разбираем алиасы.
$realPath = Yii::getAlias($filename);
// Исправляем слеши согласно используемой файловой системе.
$realPath = FileHelper::normalizePath($realPath);
Adigezalov
Сообщения: 51
Зарегистрирован: 2017.10.14, 23:52

Re: Загрузка файла на сервер

Сообщение Adigezalov »

Nex-Otaku писал(а): 2017.11.22, 14:22 Нет таких путей в файловой системе со знаком "@", это алиасы, ты должен их перевести в "настоящие" пути.

Я делаю так:

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

// Разбираем алиасы.
$realPath = Yii::getAlias($filename);
// Исправляем слеши согласно используемой файловой системе.
$realPath = FileHelper::normalizePath($realPath);
Под $filename понимается полный путь файла куда сохранять?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Загрузка файла на сервер

Сообщение Nex-Otaku »

Да, а что ещё можно под ним понимать? )

Любой путь с алиасами не будет воспринят файловой системой, ведь алиасы существуют только для самого фреймворка. Так что если используете алиасы - при передаче в файловую систему придётся их "раскрывать".
Adigezalov
Сообщения: 51
Зарегистрирован: 2017.10.14, 23:52

Re: Загрузка файла на сервер

Сообщение Adigezalov »

Nex-Otaku писал(а): 2017.11.22, 14:40 Да, а что ещё можно под ним понимать? )

Любой путь с алиасами не будет воспринят файловой системой, ведь алиасы существуют только для самого фреймворка. Так что если используете алиасы - при передаче в файловую систему придётся их "раскрывать".
Спасибо большое, разобрался
Ответить