2012-06-19 7 views
2

Мой код Yii, не показывающий ошибку, перед сохранением фильма в базе данных .. В чем проблема?Yii не отображается errorSummary

Код формы: http://jsfiddle.net/SRMzc/

это actionCreate функция:

public function actionCreateM() 
    { 
     $model=new Movie; 

     if(isset($_POST['Movie'])) 
     { 
      $model->attributes=$_POST['Movie']; 

      $photos = CUploadedFile::getInstancesByName('photo'); 

      if (isset($_POST['Movie']['youtube_id'])){ 
       $model->youtube_id=$_POST['Movie']['youtube_id']; 
      } 



      if (isset($_POST['Movie']['poster_uri'])){ 
       $file=CUploadedFile::getInstance($model,'poster_uri'); 
       if(isset($file)){ 
        $model->poster_uri = $model->short_title .'_poster.' . $file->extensionName; 
       } 
      } 

      if($model->save())....... 

Правила:

от модели кино

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
     array('title, short_title, year, imdb_rate, rate, cast, director, summary, release_date, duration, views, featured', 'required'), 
     array('views, featured, available_status', 'numerical', 'integerOnly'=>true), 
     array('title, short_title, genre, director', 'length', 'max'=>64), 
     array('poster_uri', 'file', 'types'=>'jpg, gif, png', 'allowEmpty' => true), 
     array('cast', 'length', 'max'=>256), 
     array('year', 'length', 'max'=>4), 
     array('lang', 'length', 'max'=>2), 
     array('imdb_rate', 'length', 'max'=>3), 
     array('rate', 'length', 'max'=>5), 
     array('duration', 'length', 'max'=>11), 
     // The following rule is used by search(). 
     // Please remove those attributes that should not be searched. 
     array('title, short_title, views, featured, available_status', 'safe', 'on'=>'search'), 
    ); 
} 
+0

У вас есть 'умереть()' в середине кода, является то, что с целью ? – adamors

+0

извините .. удален .. еще не отображается ошибка сводка – Abudayah

+1

Где вы называете validate и каковы ваши правила? Где вы печатаете errorSummary()? – Pentium10

ответ

3

Сводка ошибок работает с ajax. вам нужно установить enableAjaxValidation в true в вашем определении формы. то вам нужно отследить этот вызов ajax в действии и проверить свою модель, а затем повторить ошибки (проверьте, чтобы создать действие в демо-приложении в блоге Yii для получения более подробной информации).

Если вам необходимо проверить код в PHP попробовать следующие

if(!$model->save()) 
{ 
    print_r($model->getErrors()); 
} 

или

код проверки
if(!$model->validate()) 
{ 
    print_r($model->getErrors()); 
} 
else 
{ 
    $model->save(); 
} 

выходит что-то вроде этого

if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form') 
{ 
    echo CActiveForm::validate($comment); 
    Yii::app()->end(); 
} 

Edit: - Вы не действительно необходимо включить ajax для получения сводки валидации. вы можете иметь код php для того же самого, что-то вроде этого.

if($model->validate()) 
{ 
    $model->save(); 
    //render some other view here 
} 
$this->render('Your_update_or_create_view'); 
+0

good job man :) спасибо – Abudayah

+0

@Uday 'errorSummary' не нуждается в ajaxvalidation (так что пожалуйста исправьте это). однако я согласен с вашим методом отображения errorSummary для ajax. @AnasA, я думаю, вы, возможно, пропустили что-то в своих операторах 'if', которые препятствуют передаче модели с ошибкой в ​​представление. поэтому, если вы добавите весь actionCreateM, мы могли бы помочь вам исправить это. –

+0

@ bool.dev Да, я согласен с вами, действие не обязательно должно быть вызовом ajax для возврата ошибок проверки. но приведенный выше код делает активную проверку с использованием вызовов ajax, например, для события onFocusLost поля текстового поля. –

1

Я думаю, что это должно быть $ модели-> errorSummary() при использовании

<?php echo $form->errorSummary($model); ?> 
+0

'$ form-> errorSummary ($ model);' правильно проверить документацию ErrorSummary, метод не относится к какому-либо объекту модели, но принадлежит классу CHtml, а класс CActiveForm также имеет отдельную реализацию –