2012-04-01 5 views
0

yiiフレームワークを使用したフォームビルドがあります。 最初の2つの入力は「first_name」と「last_name」で、同じフォームにさらに多くの入力があります。 私は "ajaxSubmitButton"で検証をチェックしています。最初に "first_name"と "last_name"を検証したいのですが、次回はユーザーがすべてのフォームをチェックすると提出します。YIIフレームワークフォームajaxの検証のみ入力の一部

モデル - どのように私は、一部の入力を確認することができます>

  <?php echo CHtml::ajaxSubmitButton('Submit', 
                    CHtml::normalizeUrl(array('SubmitForm')), 
           array(
        'error'=>'js:function(){ 
             alert(\'error\'); 
              }', 
          'beforeSend'=>'js:function(){ 
              alert(\'beforeSend\'); 
                    }', 
                    'success'=>'js:function(data){ 
                     alert(data); 


                    }', 
                    'complete'=>'js:function(){ 
                     // alert(\'complete\'); 
                    }', 
                    'update'=>'#updatebox', 
                    ) ,array('id'=>'submit') 
                   ); 
           ?> 

コントローラ>

public function actionMessageForm() 
{ 
    $model = new Message; 
     if(isset($_POST['Message'])) 
     { 
       $model->attributes=$_POST['Message']; 
       $valid = $model->validate('setup'); 
       if($valid) 
       { 
        echo "pass"; 
       $model->save(); 
       } 
       else 
       { 
        echo "failed"; 
       } 

     } 

} 

- >は

 array('first_name, last_name', 'length', 'min'=>2 , 'on' => 'setup'), 
        array('first_name, last_name , email, subject , message', 'length', 'min'=>2 , 'on' => 'submit'), 

ビューでのAjaxボタンルール? 私がやっていることは間違っていますか?

+0

私はあなたを理解しているのか分かりません。フォームを2回検証する必要があります。最初に "first_name"と "last_name"入力のみを検証した後、何をするのですか? – temni

+0

すべてのフォームフィールドを検証します。 – Dar

答えて

1

かもしれません。この:

public function actionMessageForm() 
{ 
    $model = new Message; 
     if(isset($_POST['Message'])) 
     { 
       $model->scenario = 'setup'; <-- changed 
       $model->attributes=$_POST['Message']; 
       $valid = $model->validate(); <-- passing a value in here is passing an attribute 

またはこの:

public function actionMessageForm() 
{ 
    $model = new Message; 
     if(isset($_POST['Message'])) 
     { 
       $model->attributes=$_POST['Message']; 
       $valid = $model->validate('setup'); 

は、このする必要があります

public function actionMessageForm() 
{ 
     if(isset($_POST['Message'])) 
     { 
      $model = new Message('setup'); 

はその助けをしていますか?

+0

それは動作していますが、クライアント側の検証ではすべてがこのように検証に合格したようです。 – Dar

+0

ではないにもかかわらず、シナリオの途中でクライアント側の検証がうまくいきません。クライアント側のJavaScriptは、同時に書き換えられません。代わりにAjax検証を使用する価値があります。物事が今働いているなら、私は解決策として私の答えをマークしていただきたいと思います。ありがとう! – acorncom

+0

ユーザがシナリオでリアルタイム入力を正確に入力しないと、エラーを起こさないように検証を変更するにはどうすればよいですか? – Dar

2

利用シナリオ仲間

http://www.yiiframework.com/wiki/266/understanding-scenarios/

ことが検証された場合にのみ、最初と最後の名前は

を必要とされている1つのシナリオ「buttafuocoは」(何がするそれを呼び出す)、にシナリオを切り替える作りますすべてのフィールドが必要な 'blagojevich'(新しいシナリオ)

あなたはあなたのコントローラにバグがあり、セッション中に現在のシナリオ名を保存するために持っているか、ポスト変数

+0

私のために働いていません。 – Dar