Yii Upload Pliku.

Witam, mam następujący problem.

nie mogę zapisać pliku do danej ścieżki. Mój kod:


if (isset($_FILES['list_motywacyjny'])) {

            if (!is_dir(Yii::app()->basePath . '/../upload/' . $models1->id)) {

                mkdir(Yii::app()->basePath . '/../upload/' . $models1->id);

                $uploadedFile = $_FILES['list_motywacyjny'];

                $fileName = time() . '_' . $_FILES['list_motywacyjny']['name'];

                $path = Yii::app()->basePath . '/../upload/' . $models1->id . '/' . $fileName;

                $uploadedFile->saveAs($path);



Z var_dump($uploadedFile) dostaje:


array (size=5)

  'name' => string 'plik.doc' (length=7)

  'type' => string 'application/msword' (length=18)

  'tmp_name' => string 'C:\xampp\tmp\phpBC13.tmp' (length=24)

  'error' => int 0

  'size' => int 0

Z var_dump($path) dostaje:


string 'C:\xampp\htdocs\project\protected/../upload/62/1369132914_plik.doc' (length=66)

i bez var_dumpów dostaje error:


 Fatal error: Call to a member function saveAs() on a non-object in C:\xampp\htdocs\project\protected\controllers\AddrekrutacjaController.php on line 246

Line 246 to:


$uploadedFile->saveAs($path);

Co jest nie tak?

Witam,

$uploadedFile to jest tablica. Błąd oznaczy nie mniej nie więcej niż to, że tablica nie ma (i mieć nie może) funkcji składowych. Ty próbujesz wywołać taką:


$uploadedFile->saveAs($path);

Domyślać się można jedynie, że chcesz skorzystać z klasy CUploadedFile. W takim przypadku musisz pobrać instancje obiektu klasy CUploadedFile za pomocą np. funkcji getInstance(). Więcej tutaj oraz tutaj.

Tak masz racje, tylko że ja w jednym widoku mam 3 modele po releacjach zawarte. I posiadam formularzu

"<input type=file>" a w getInstance(); potrzebuje odwołać się do danego modelu. Bo według ciebie powinienem mieć w widoku :


<?php echo CHtml::fileField('list_motywacyjny', '') ?>

I w akcji kontrolera :


$uploadedFile = CUploadedFile::getInstance($model, 'list_motywacyjny');

A jak mogę zrobić to bez modelu? żeby zaciągał $_FILES z postu?

Zajrzałeś do linku, który Ci wysłałem? Pod getInstance() masz od razu getInstanceByName().

Tak, i wielkie dzięki, udało mi się poprać plik, i zapisać go po do ścieżki do której chciałem. Thx !