Опять проблемы.
В общем вот view
Код: Выделить всё
<?php $form = $this->beginWidget('CActiveForm', array(
'htmlOptions' => array('enctype' => 'multipart/form-data',
'id' => 'add-new-message-form'
),
'enableAjaxValidation' => true,
'focus' => array($model, 'post'),
'clientOptions' => array(
'validateOnSubmit' => true,
'validateOnChange' => false
)
)); ?>
<input id="url" type="hidden" value="<?php echo Yii::app()->createUrl("bred/deleteId", array('ajax' => 1)); ?>">
<div class="field-message">
<?php echo $form->label($model, 'name'); ?>
<?php echo $form->textField($model, 'name'); ?>
<?php echo $form->error($model, 'name'); ?>
</div>
<div class="field-message">
<?php echo $form->label($model, 'post', array('class' => 'new-post-add-label')); ?>
<?php echo $form->textArea($model, 'post', array('class' => 'new-post-add')); ?>
<?php echo $form->error($model, 'post'); ?>
</div>
<div class="field-message">
<?php echo $form->label($model, 'img'); ?>
<?php echo $form->fileField($model, 'img'); ?>
<?php echo $form->error($model, 'img'); ?>
</div>
<div class="field-message">
<?php echo CHtml::submitButton('Отправить', array('id' => 'add-new-message-submit')); ?>
</div>
Контроллер
Код: Выделить всё
protected function performAjaxValidation($model) {
if(isset($_POST['ajax']) && $_POST['ajax'] === 'add-new-message-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
## Watch main page
public function actionIndex() {
$model = new Bred;
$model->setScenario('index');
$arg = $model->getThreadsPagination();
if ( isset($_POST['ajax']) ) {
$this->performAjaxValidation($model);
}
if ( isset($_POST['Bred']) ) {
$model->attributes = $_POST['Bred'];
$model->img = CUploadedFile::getInstance($model, 'img'); #If file not exists @ruturn null
if ( $model->validate() ) {
if ( !is_null($model->img) ) {
$fileName = H::renameFile($model->img->name);
$model->img->saveAs('images/' . $fileName);
$model->img = $fileName;
## Thumb
H::createThumb('images/' . $model->img);
}
$model->time = time();
$model->save();
$this->refresh();
}
}
}
И правила валидации
Код: Выделить всё
array('post', 'required', 'message' => 'Обязательное поле'),
array('img', 'file', 'types' => 'png, gif, jpg', 'maxSize' => 5242880, 'wrongType' => 'Разрешено загружать только .png .gif .jpg', 'tooLarge' => 'Макс. размер файла 5мб', 'message' => 'Для создание нового треда, нужна картинка!', 'on' => 'index'),
array('img', 'file', 'types' => 'png, gif, jpg', 'maxSize' => 5242880, 'wrongType' => 'Разрешено загружать только .png .gif .jpg', 'tooLarge' => 'Макс. размер файла 5мб', 'allowEmpty' => true, 'on' => 'thread'),
array('name', 'safe')
Проблема в том, что fileField не проходит валидацию. Как я понял, загрузить файл аяксом - сложно, но мне этого не надо,
надо всего лишь проверить, поставлен ли файл на загрзку или нет. В любом случае на сервер отправляется вот такой запрос
Код: Выделить всё
YII_CSRF_TOKEN:ea36d5294bceb95c8d73be803abc7690fe926c5a
Bred[name]:Аноним
Bred[post]:12
Bred[img]:
ajax:add-new-message-form
yt0:Отправить
поле Bred[img] всегда пусто.
При отключении валидации, все работает и загружается.