Здравствуйте.
Столкнулся с такой проблемой. У меня на сайте пользователь вводит данные, в том числе 3 фото. Если введены не все фото то возникает ошибка, так как приходит пустое поле в обработчик. Как по умолчанию в это пустое поле подставлять изображение no_image ? Вот код формы отправки
<div class="row">
<?php echo $form->labelEx($model,'title'); ?>
<?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'title'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'image'); ?>
<?php echo $form->fileField($model, 'image'); ?>
<?php echo $form->error($model,'image'); ?>
<?php if(!$model->isNewRecord) {
echo CHtml::image(Yii::app()->baseUrl.'/images/catalog/thumb_small/' .$model->id . '_small.jpg');
}?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'image1'); ?>
<?php echo $form->fileField($model, 'image1'); ?>
<?php echo $form->error($model,'image1'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'image2'); ?>
<?php echo $form->fileField($model, 'image2'); ?>
<?php echo $form->error($model,'image2'); ?>
</div>
Вот код обработчика в контроллере
public function actionCreate(){
$model=new Catalog;
if(isset($_POST['Catalog']))
{
$model->attributes=$_POST['Catalog'];
$model->image=CUploadedFile::getInstance($model,'image');
$model->image1=CUploadedFile::getInstance($model,'image1');
$model->image2=CUploadedFile::getInstance($model,'image2');
//Атрибуту icon присвоить указатель на загружаемый файл
if($model->save())
//Если надо сохранить модель
{
if ($model->image)
//Если пользователь загрузил файл
{
$file = 'images/catalog/'.$model->id. '_big.jpg';
$file1 = 'images/catalog/'.$model->id. '_big1.jpg';
$file2 = 'images/catalog/'.$model->id. '_big2.jpg';
//Переменной $file присвоить путь, куда сохранится картинка без изменений
$model->image->saveAs($file);
$model->image1->saveAs($file1);
$model->image2->saveAs($file2);
//Сохранить картинку без изменений по указанному пути
//Используем функции расширения CImageHandler ;
$ih = new CImageHandler(); //Инициализация
Yii::app()->ih
->load($file) //Загрузка оригинала картинки
->thumb('350', '350') //Создание превьюшки размером 200px
->save('images/catalog/thumb/'.
$model->id. '_small.jpg')
//Сохранение превьюшки в папку
->reload() //Снова загрузка оригинала картинки
->thumb('200', '200') //Создание превьюшки размером 50px
->save('images/catalog/thumb_small/'
.$model->id. '_small.jpg');
//Сохранение превьюшки в папку
Yii::app()->ih
->load($file1) //Загрузка оригинала картинки
->thumb('350', '350') //Создание превьюшки размером 200px
->save('images/catalog/thumb/'.
$model->id. '_small1.jpg')
//Сохранение превьюшки в папку
->reload() //Снова загрузка оригинала картинки
->thumb('200', '200') //Создание превьюшки размером 50px
->save('images/catalog/thumb_small/'
.$model->id. '_small1.jpg');
Yii::app()->ih
->load($file2) //Загрузка оригинала картинки
->thumb('350', '350') //Создание превьюшки размером 200px
->save('images/catalog/thumb/'.
$model->id. '_small2.jpg')
//Сохранение превьюшки в папку
->reload() //Снова загрузка оригинала картинки
->thumb('200', '200') //Создание превьюшки размером 50px
->save('images/catalog/thumb_small/'
.$model->id. '_small2.jpg')
//Сохранение превьюшки в папку
;
}
$this->redirect(array('index'));
}
}
$this->render('create',array(
'model'=>$model,
));
}
Вот код модели, точнее правил валидации.
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('title, image, text, price, status', 'required'),
array('created, price, status, price_opt, price_old, quantity_opt', 'numerical', 'integerOnly'=>true),
array('title, image, image1, image2', 'length', 'max'=>255),
array('image, image1, image2', 'file', 'types'=>'jpg, gif, png','allowEmpty'=>true ),
array('image, image1, image2', 'default', 'value' => Yii::app()->baseUrl.'/images/no_image.jpg','safe'=>true),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, title, image, text, created, price, price_opt, price_old, quantity_opt, status', 'safe', 'on'=>'search'),
);
}
Ну никак не получается. Если кто знает подскажите пожалуйста как и где сделать подстановку дефолтного фото?
Заранее благодарен.