Ajax検証は3つのフェーズで構成されています。
- フォームフィールドの値を使用してajaxリクエストをサーバーに送信し、それらを検証します。
 
- フィールドを検証し、サーバーから検証メッセージを返します。
 
- 検証メッセージでフォームフィールドを更新します。
 
に設定enableAjaxValidationするtrueと、フェーズ1と3が処理されるため、フェーズ2が残っています。
フェーズ2。
デフォルトでは、ajax検証はPOST ajax呼び出しをトリガーし、追加の1つ 'ajax'のpostパラメーターを使用して、その値がid検証されるフォームのに設定されます。あなたの場合、それは次のようajax --> contact-formになります:、、ajax --> post-form。
したがって、サーバー側でこのPOSTリクエストをキャッチし、リクエストで送信されたフィールドを検証した後に応答を送信する必要があります。
POSTリクエストはフォームのactionURL(デフォルト)に送信されます。この場合、次のようになります。これは、 controllers/SiteController.phpの関数http://foo/index.php/site/contactを変更する必要があることを意味します。actionContact
public function actionContact(){
    $model = new ContactForm;
    // checking if it is ajax validation request below 
    if(isset($_POST['ajax']) && $_POST['ajax']==='contact-form') {
        echo CActiveForm::validate($model); // validate the form fields sent in POST, and return response
        Yii::app()->end(); // end the application
    }
    // ... leave the rest of the code as is ...
}
ブログデモのviews/site / contact.phpにはエラーフィールドがないため、メッセージはまだ表示されません。それらを表示するには、フォームにエラーフィールドを追加します。
<div class="row">
    <?php echo $form->labelEx($model,'name'); ?>
    <?php echo $form->textField($model,'name'); ?>
    <?php echo $form->error($model,'name'); // this line needs to be added ?>
</div>
他の入力についても同様にエラーフィールドを追加します。
post / _form.phpについては、 controllers / PostController.phpactionCreateとメソッドに対して(最初のコードスニペットから)同様の調整を行いactionUpdateます。ifチェックが次のように変更されます。
 if(isset($_POST['ajax']) && $_POST['ajax']==='post-form')
追加情報。
ajaxPOSTパラメータはと呼ばれ、デフォルトajaxVarはajax。です。action検証URL(またはvalidationUrlのclientOptions)やのajaxVar($_POST['ajax'])など、これらのデフォルトの多くを変更できますclientOptions。ドキュメントを読んでオプションを確認してください。
1 フォームのフィールドに加えて。