1

Yiiブログのデモでは、フレームワークのダウンロードとここに含まれています:

http://www.yiiframework.com/demos/blog/

フォーム入力のajax検証は、コメント投稿フォームとログインフォームで機能します。

demos \ blog \ protected \ views \ comment_form.php

demos \ blog \ protected \ views \ login.php

どちらも次のようなものが含まれます

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

また

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

私はviews/site/contact.phpとviews/post / _form.php('id' =>'contact-form'、および'post-form')に同様のものを追加しようとしましたが、機能していません(タブアウトフォームフィールドは、入力が有効か無効かによって赤または緑のフィールドになりません。また、ajaxによって生成された無効なメッセージもありません)

4

1 に答える 1

1

Ajax検証は3つのフェーズで構成されています。

  1. フォームフィールドの値を使用してajaxリクエストをサーバーに送信し、それらを検証します。
  2. フィールドを検証し、サーバーから検証メッセージを返します。
  3. 検証メッセージでフォームフィールドを更新します。

に設定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パラメータはと呼ばれ、デフォルトajaxVarajax。です。action検証URL(またはvalidationUrlclientOptions)やのajaxVar$_POST['ajax'])など、これらのデフォルトの多くを変更できますclientOptionsドキュメントを読んでオプションを確認してください。


1 フォームのフィールドに加えて。

于 2013-01-01T12:30:06.783 に答える