Загрузка файлов с учетом текущей даты

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Boglik
Сообщения: 42
Зарегистрирован: 2018.10.16, 04:49

Загрузка файлов с учетом текущей даты

Сообщение Boglik »

Всем привет.
Хочу сделать загрузку файлов с сортировкой по датам. По задумке при загрузке/обновлении файла создается папка год, например, 2020, внутри 10, и дата, например, 11.

Код сделал таким. Должно все корректно работать, права указал, но файл не создается и папки соответственнно, тоже, сообщение "папка не создалась" тоже не вывелась. Скажите, пожалуйста, почему?

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

public function actionUpdate($id)
    {
        //проверка прав файл
        $model = $this->findModel($id);
        if (!Yii::$app->user->can('OwnSquad',['post'=>$model])) {
            if (!Yii::$app->user->can('OwnSquad',['post'=>$model]))
            {
                throw new ForbiddenHttpException("Доступ запрещен");
            }
        }

        if ($model->load(Yii::$app->request->post())){

            $docs = UploadedFile::getInstance($model, 'docs');
            if ($docs && $docs->tempName) {
                $model->docs = $docs;

            $image_name = $this->randomFileName($model->docs->extension);
            $image_path = 'uploads/documents/' . date('d/m/Y') . '/' . $image_name;
            if (file_exists($image_path)) {
                mkdir('uploads/documents/' . date('d/m/Y') . '/' , 777, true);
            }
            else 
                echo 'не удалось создать папку';
            $model->docs->saveAs($image_path);
            
            

              $model->docs = $image_path;
            } else {
                $model->docs = $model->getOldAttribute('docs');
            }
            $model->save();

            return $this->redirect(['view', 'id' => $model->id]);
        }
        return $this->render('update', [
            'model' => $model,
        ]);
    }
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Загрузка файлов с учетом текущей даты

Сообщение leonenco »

Вы пробовали использовать алиасы, чтобы задать абсолютный путь к корневой директории где вы собираетесь сохранять файлы?
Как то так:

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

$path = \Yii::getAlias('@frontend/uploads/' . $month . DIRECTORY_SEPARATOR . $day . DIRECTORY_SEPARATOR;
$file_path = $path . $filename;
Также я заметил что вы используйте нативные методы создания директории, что вам предоставленно самим фреймворком:

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

FileHelper::createDirectory($path);
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: Загрузка файлов с учетом текущей даты

Сообщение Tommi »

Код нелогичный.
Как можно проверять (file_exists($image_path)) если это имя только что случайно сформировал
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Загрузка файлов с учетом текущей даты

Сообщение long399 »

Boglik писал(а): 2020.10.12, 17:56

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

if (!Yii::$app->user->can('OwnSquad',['post'=>$model])) {
    if (!Yii::$app->user->can('OwnSquad',['post'=>$model]))
    {
        throw new ForbiddenHttpException("Доступ запрещен");
    }
}
зачем одна и та же проверка выполняется 2 раза ?
Boglik писал(а): 2020.10.12, 17:56 По задумке при загрузке/обновлении файла создается папка год, например, 2020, внутри 10, и дата, например, 11.
В коде же вы сами пытаетесь создать не такую структуру папок, а день/месяц/год.
Ответить