Ajax検証は3つのフェーズで構成されています。
- フォームフィールドの値を使用してajaxリクエストをサーバーに送信し、それらを検証します。
- フィールドを検証し、サーバーから検証メッセージを返します。
- 検証メッセージでフォームフィールドを更新します。
に設定enableAjaxValidation
するtrue
と、フェーズ1と3が処理されるため、フェーズ2が残っています。
フェーズ2。
デフォルトでは、ajax検証はPOST ajax呼び出しをトリガーし、追加の1つ 'ajax'
のpostパラメーターを使用して、その値がid
検証されるフォームのに設定されます。あなたの場合、それは次のようajax --> contact-form
になります:、、ajax --> post-form
。
したがって、サーバー側でこのPOSTリクエストをキャッチし、リクエストで送信されたフィールドを検証した後に応答を送信する必要があります。
POSTリクエストはフォームのaction
URL(デフォルト)に送信されます。この場合、次のようになります。これは、 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')
追加情報。
ajax
POSTパラメータはと呼ばれ、デフォルトajaxVar
はajax
。です。action
検証URL(またはvalidationUrl
のclientOptions
)やのajaxVar
($_POST['ajax']
)など、これらのデフォルトの多くを変更できますclientOptions
。ドキュメントを読んでオプションを確認してください。
1 フォームのフィールドに加えて。