Излагаю проблему:
есть форма для загрузки данных в 5 полей. Одно поле это типа file для загрузки картинки.
В базу записывается только имя картинки и поле в таблице типа varchar.
Делаю валидацию на модели
return array(
array(‘name, title, text’, ‘required’),
array(‘name’, ‘length’, ‘max’=>50),
array(‘title’, ‘length’, ‘max’=>250),
array(‘fileName’, ‘file’, ‘types’=>‘jpg, gif, png’, ‘on’=>‘create, update’),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(‘merchantId, name, title, text’, ‘safe’, ‘on’=>‘search’),
);
Прошу обратить внимание на валидацию fileName. Это и есть поле картинки.
При добавлении регистра никаких проблем, поле файла обязательное и проверка на расширение файла работает.
Проблемы возникают при модификации.
- Ведь если is not uploaded file, мне не нужно ничего проверять и мофицировать. Значит надо убирать валидацию, но если юзер действительно хочет поменять файл, то валидация должна работать. Тоесть, нужно ли мне активировать валидацию файла с контроллера, можно ли это вобще зделать, может какие другие идеи будут? Спасибо.
код контроллера:
public function actionUpdate()
{
$model=$this->loadModel();
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Merchant']))
{
$oldFile = $model->fileName;
$file = CUploadedFile::getInstance($model,'fileName');
if (is_object($file) && get_class($file)==='CUploadedFile')
{
$model->fileName = $file->getName();
$_POST['Merchant']['fileName'] = $file->getName();
}
else
{
$_POST['Merchant']['fileName'] = $oldFile;
}
$model->attributes = $_POST['Merchant'];
if($model->save())
{
if (is_object($file))
{
unlink("C:\\AppServ\\www\\continea\\images\\merchants\\".$oldFile);
$file->saveAs("C:\\AppServ\\www\\continea\\images\\merchants\\".$file->getName());
}
$this->redirect(array('view','id'=>$model->merchantId));
}
}
$this->render('update',array(
'model'=>$model,
));
}