Переписал на аякс валидацию.
Модель:
Код: Выделить всё
array('avatar', 'file','types'=>'jpg, gif, png','maxSize' => 1024*1024*5, 'allowEmpty' => true),
View:
Код: Выделить всё
<?php $form = $this->beginWidget('CActiveForm', array(
'id' => 'registration-form',
'action' => array('studentreg/registration'),
'enableAjaxValidation'=>true,
'clientOptions'=>array('validateOnSubmit'=>true,'validateOnChange'=>false),
'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
<?php echo CHtml::activeFileField($model, 'avatar',array('tabindex'=>'-1',"class"=>"chooseAvatar","onchange"=>"getName(this.value)")); ?>
Контроллер:
Код: Выделить всё
if (isset($_POST['ajax']) && $_POST['ajax'] === 'registration-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
if (isset($_POST['Reg'])) {
...
if (isset($model->avatar)) $model->avatar = CUploadedFile::getInstance($model, 'avatar');
if ($model->validate()) {
if (isset($model->avatar)) {
$fileName = ''text.jpg";
$model->avatar->saveAs(Yii::getpathOfAlias('webroot') . "/images/avatars/" . $fileName);
$model->avatar = $fileName;
} else $model->avatar = 'noname.png';
...
$model->save();
}
Теперь проблема с самой валидацией файла. Если убрать 'allowEmpty' => true - валидирует аяксом и хочет файла. А если оставить - не валидирует если файл 5.6 МБ. Если не загружать вообще файл то не сохраняет в базу $model->avatar = 'noname.png'; а заносит туда Null - это пока самая большая проблема. Как установить дефолтное имя если файл пустой