2012-01-12 11 views
0

私はYii初心者です。次の問題があります。Yii - 検証付きAjaxフォーム

私は管理バックエンドフォームのようになるフォームを持っています。コントローラークラスにはそれぞれ独自の「アクション」を持つ多数のボタンがあります。私がしたいのは、「シナリオ」に応じてフォーム要素を検証し、アクションに必要なすべてのパラメータが適切に埋め込まれていない場合に適切なエラーメッセージを表示することだけです。

ページをリロードせずにこれを行う方法を教えてもらえますか?

[私は方法を見つけましたが、私がやっていることが「技術的に」正しいのか分かりません。私はフォームで実行したいすべてのアクションのボタンを送信しています。それぞれのアクションでは、検証とrenderPartialフォームのデータを返します。各ボタンのOnSuccessは、 "form-div"全体のデータをコントローラーからレットされたデータで置き換えます。それは動作しますが、私はこれはこれを達成するための唯一の方法であるかどうかを知りたい。]​​

+0

モデルに必要なシナリオを定義します。それぞれのアクションで '$ model-> scenario = 'name';'のようなシナリオを指定してから '$ model-> validate();' –

+0

を呼び出してください。ファイヤーバグの結果を見ると、応答HTMLにエラーフラグなどが設定されているのがわかりますが、私のディスプレイには反映されていません。私は理由を見つけることができません! –

答えて

1

はあなたのコントローラのアクションに次の例

を参照してくださいtrueにCActiveFomのajaxformvalidationプロパティを有効にする必要があり
あなたはコメントを外す必要がありますあなたのビューに次の行

$this->performAjaxValidation($model); 

<?php 
    $form = $this->beginWidget('CActiveForm', array( 
       'id' => 'test-form', 
       'enableAjaxValidation' => true, 
      )); 
?> 
+0

申し訳ありませんが、どこでも$ this-> performAjaxValidation($ model)行が見つかりません。デフォルトのアクションで追加する必要がありますか、何か不足していますか? –

+1

コントローラアクションで 'actionCreate()'に行きます。 '$ this-> performAjaxValidation($ model)'を得ることができます。このコード行はそこに 'comment'されています。 – NewUser