Я хочу загрузить изображение и изменить оригинальное имя, а затем сохранить его.
Модель:
public function rules()
{
return array(
array('image', 'file', 'types'=>'jpg, gif, png'),
);
}
контроллер:
$model->image = CUploadedFile::getInstanceByName('image');
Если я сохраню его без каких-либо других действий, он будет работать. Но как я могу изменить название изображения? Я попробую что-то вроде ниже:
$model->image->name = "xxx"; //CUploadedFile.name readonly
if($model->save())
$model->images->saveAs(some_path_else.newname); //the files new name is different from database
$model->image = "abc.jpg"; //wont save it
Является ли атрибут изображения обязательным экземпляром CUploadedFile? Кто-нибудь поможет PLS
Спасибо за Ваш ответ. Я понял. CUploadedFile.name только для чтения, поэтому я не могу его изменить. Модель нуждается в новом публичном атрибуте:
public $file;
public function rules()
{
return array(
array('file', 'file', 'types'=>'jpg, gif, png'),
array('iamge', 'length'=>'255'),
);
}
Затем в контроллере:
$model->file = CUploadedFile::getInstanceByName('image');
$model->file->saveAs(Yii::app()->basePath.'/../public/images/user/' . $model->image);
$model->image = $model->file->name;
Он отлично работает (это не настоящий код) см. Здесь
сделать что-то подобное
$uploadedFile = CUploadedFile::getInstance($model, 'image');
if (!empty($uploadedFile)) {
//new name will go here
$model->image = strtotime($this->getCurrentDateTime()) . '-' .$uploadedFile;
}
//this will save the image with new name
$uploadedFile->saveAs(Yii::app()->basePath.'/../public/images/user/' . $model->image);