Yii отсутствует файл после отправки через форму - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в phbp и yii, и у меня есть проблема с файлом sendind, я использую виджет kartik \ file \ FileInput без модели и отправляю на контроллер yii, где я могу получить свой файл из $ POST и вв первый раз я использовал move_uploaded_file со ссылкой на мой файл на tmp. Первая идея с перемещением не работает, я не могу найти свой файл на диске, я знаю, что это systemd, но я меняю папку tmp в php.ini, но файл из формы не отображается в этом месте. Это мой conbtroller

    $output = "";
    $modelZalaczniki = new DelegacjeZalacznikiSearch();
    $modelZalaczniki->d_add = date('Y-m-d H:i:s');
    $modelZalaczniki->u_add = Yii::$app->user->identity->id;

    if (empty($_FILES['file'])){
        echo json_encode(['error'=>'Nie znaleziono plik.w.']);
        return;
    }

    $files = $_FILES['file'];
    $success = null;
    $paths = [];

    $fileNames = $files['name'];

    if(!file_exists('uploads')){
        mkdir('uploads', 0750, true);
    }
    if(!file_exists('uploads'.DIRECTORY_SEPARATOR.'delegacje')){
        mkdir('uploads'.DIRECTORY_SEPARATOR.'delegacje', 0750, true);
    }
    if(!file_exists('uploads'.DIRECTORY_SEPARATOR.'delegacje'.DIRECTORY_SEPARATOR.'pliki')){
        mkdir('uploads'.DIRECTORY_SEPARATOR.'delegacje'.DIRECTORY_SEPARATOR.'pliki', 0750, true);
    }
    if(!file_exists('uploads'.DIRECTORY_SEPARATOR.'delegacje'.DIRECTORY_SEPARATOR.'pliki'.DIRECTORY_SEPARATOR.$delegacja_id)){
        mkdir('uploads'.DIRECTORY_SEPARATOR.'delegacje'.DIRECTORY_SEPARATOR.'pliki'.DIRECTORY_SEPARATOR.$delegacja_id, 0750, true);
    }
    for($i = 0; $i < count($fileNames); $i++){
        $ext = explode('.', basename($fileNames[$i]));
        $hashName = md5($fileNames[$i]);
        $target = 'uploads'.DIRECTORY_SEPARATOR.'delegacje'.DIRECTORY_SEPARATOR.'pliki'.DIRECTORY_SEPARATOR.$delegacja_id.DIRECTORY_SEPARATOR.$hashName;
        // if(file_exists($target)){
        //     $success = true;
        //     break;
        // }

        if(move_uploaded_file($files['tmp_name'][$i], $target)){
            $success = true;
            $paths[] = $target;

            $modelZalaczniki = new DelegacjeZalaczniki();
            $modelZalaczniki->delegacja_id = $delegacja_id;
            $modelZalaczniki->d_add = date('Y-m-d H:i:s');
            $modelZalaczniki->u_add = Yii::$app->user->identity->id;
            $modelZalaczniki->sciezka = $target;
            $modelZalaczniki->nazwa = $fileNames[$i];
            $modelZalaczniki->typ = $ext[1];
            $modelZalaczniki->size = $files['size'][$i];

            if ($modelZalaczniki->validate()){
                $modelZalaczniki->save();
            }
        }else{
            $success = false;
            break;
        }

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

1 Ответ

0 голосов
/ 04 октября 2019

Yii 2.0 отлично подходит для загрузки файлов. Нет необходимости в move_uploaded_file.

Ознакомьтесь с документацией и, в частности, с методом UploadedFile::getInstance().

Здесь можно найти полезные примеры, которые имеют отношение к тому, что вы делаете:

https://www.yiiframework.com/doc/guide/2.0/en/input-file-upload

В приведенном выше коде при отправке формы вызывается метод yii \ web \ UploadedFile :: getInstance () для представления загруженного файла в качестве экземпляра UploadedFile. ,Затем мы полагаемся на проверку модели, чтобы убедиться, что загруженный файл действителен, и сохраним файл на сервере.

...