TheStik
(Stik 90)
June 21, 2013, 5:06pm
1
При загрузке файлов выдает ошибку:
Call to a member function saveAs() on a non-object
Собственно сама строка:
$model->image->saveAs('images/poster');
Контроллер:
public function actionCreate()
{
$model=new Film;
if(isset($_POST['Film']))
{
$model->image=CUploadedFile::getInstance($model,'image');
$model->attributes=$_POST['Film'];
$model->created=date('Y-m-d');
if($model->save()){
$model->image->saveAs('images/poster');
$this->redirect(array('index'));
}
}
$this->render('create',array(
'model'=>$model,
));
}
Форма:
echo $form->labelEx($model,'Изображение:');
echo $form->fileField($model,'image');
echo $form->error($model,'image');
Почитал рецепты, пересмотрел, погуглилб в чем ошибка так и не понял, за компомсижу долго, возможно ошибка под носом, как чаще всего и бывает. Надеюсь на ваш свежий взгляд со стороны
CUploadedFile::getInstance($model,'image');
что возвращает? Судя по всему Null. Права на запись в tmp есть?
TheStik
(Stik 90)
June 21, 2013, 5:16pm
3
Да, var_dump($model->image) возвратило NULL, проверял уже сегодня. Open server + windows на сколько знаю права на запись на всех папках. Имя файла получает, в БД записывает
TheStik
(Stik 90)
June 21, 2013, 6:15pm
4
Добавил в beginWidget строку ‘htmlOptions’ => array(‘enctype’ => ‘multipart/form-data’), что она значит, так и не понял… контроллер все также не может найти saveAs, но $model->image теперь содержит следующее:
object(CUploadedFile)#46 (7) { ["_name":"CUploadedFile":private]=> string(7) "111.jpg" ["_tempName":"CUploadedFile":private]=> string(47) "D:\Program\OpenServer\userdata\temp\phpACAB.tmp" ["_type":"CUploadedFile":private]=> string(10) "image/jpeg" ["_size":"CUploadedFile":private]=> int(32603) ["_error":"CUploadedFile":private]=> int(0) ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL }
Она как раз и значит что форма может передавать файл
$model->image=CUploadedFile::getInstance($model,'image');
$model->attributes=$_POST['Film'];
поменяйте строки местами
TheStik
(Stik 90)
June 21, 2013, 6:38pm
7
Аж стыдно
Ну savaAs находит, эт радует, ток теперь другая ошибка, вроде с путями, хотя прописан верно
move_uploaded_file(): The second argument to copy() function cannot be a directory
D:\Program\OpenServer\domains\yii\web\CUploadedFile.php(196)
return move_uploaded_file($this->_tempName,$file);
$model->image все также содержит ту ахинею
$model->image->saveAs('images/poster');
надо указать имя файла, например:
$filename = md5(time().uniqid()).'.jpg';
$model->image->saveAs('images/poster/'.$filename);
TheStik
(Stik 90)
June 21, 2013, 7:33pm
9
Фууууууфффф… наконец спать лягу))) всем большое спасибо за помощь