2012-06-19 70 views
2

我的Yii代碼在數據庫保存電影之前沒有顯示錯誤總結..有什麼問題嗎?Yii沒有顯示錯誤彙總

表單代碼: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

你在哪裏打電話驗證,你的規則是什麼?你在哪裏打印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(); 
} 

編輯: - 你不真的需要啓用ajax來獲得驗證總結。你可以擁有相同的php代碼,就像這樣。

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

好工作的人:)謝謝 – Abudayah

+0

@Uday'errorSummary'並不絕對需要ajaxvalidation(所以請正確)。不過,我同意你顯示ajax errorSummary的方法。 @AnasA我想你可能錯過了你的'if'語句中的某些東西,這可以防止錯誤被傳遞給視圖的模型。所以如果你添加你的整個actionCreateM,我們可以幫你糾正這個問題。 –

+0

@ bool.dev是的我同意你的觀點,該動作不需要是ajax調用來返回驗證錯誤。但上面顯示的代碼使用ajax調用進行主動驗證,例如對於文本框字段的onFocusLost事件。 –

1

我想應該是$模型 - > errorSummary(),而你正在使用

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

'$ form-> errorSummary($ model);'是正確的檢查errorSummary文檔,方法不屬於任何模型對象,但屬於CHtml類,並且CActiveForm類也具有單獨的實現 –