2012-04-01 6 views
0

Ich habe Formularaufbau mit YII-Framework. Die ersten 2 Eingänge sind "first_name" und "last_name" und ich habe viele weitere Eingänge in der gleichen Form. Ich überprüfe die Validierung mit "ajaxSubmitButton" und ich möchte zuerst überprüfen nur "first_name" und "last_name" übergeben die Validierung und wenn sie das nächste Mal tun, wenn der Benutzer wird es alle Formular überprüfen.YII Rahmen Form Ajax-Validierung nur Teil der Eingabe

Modell -> Regeln

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

Ajax-Knopf Ansicht ->

  <?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') 
                   ); 
           ?> 

Controller>

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"; 
       } 

     } 

} 

Wie kann ich teilweise Eingaben überprüfen? Was mache ich falsch?

+0

Ich bin mir nicht sicher, ob ich dich verstanden habe. Sie müssen Ihr Formular zweimal validieren - das erste Mal, wenn Sie nur die Eingaben "first_name" und "last_name" validieren und danach was? – temni

+0

Danach werde ich alle Formularfelder validieren. – Dar

Antwort

1

Sie haben einen Fehler in dem Controller. Dies:

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 

oder dies:

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

Hilft

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

sollte das sein?

+0

Es funktioniert aber in der Client-Seite Validierung sieht alles so aus wie die Validierung bestanden. Obwohl es nicht – Dar

+0

ist Client-seitige Validierung wird wahrscheinlich nicht gut für dieses Setup funktionieren, da Sie Ihre Szenarien auf halbem Wege ändern. Das clientseitige JavaScript wird nicht gleichzeitig neu geschrieben. Es könnte sich lohnen, stattdessen die Ajax-Validierung zu verwenden. Und wenn die Dinge jetzt funktionieren, würde ich mich freuen, wenn Sie meine Antwort als Lösung markieren. Vielen Dank! – acorncom

+0

Wie kann ich die Validierung ändern, so dass es einen Fehler traw würde, wenn der Benutzer Feld nicht korrekt in Echtzeit mit den Szenarien eingeben würde? – Dar

2

Nutzungsszenarien bro

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

ein Szenario machen ‚Buttafuoco‘ (wie man es nennen wird), wo nur die Vor- und Nachnamen

erforderlich sind, wenn das bestätigt, schalten Sie das Szenario 'Blagojevich' (ein neues Szenario), wo alle Felder benötigt werden.

Sie könnten das aktuelle Szenario Namen in der Sitzung speichern oder einen Beitrag Variable

+0

Es funktioniert nicht für mich. – Dar