2012-04-01 162 views
0

我用yii框架構建表單。 前2個輸入是「first_name」和「last_name」,我有更多的輸入相同的形式。 我正在使用「ajaxSubmitButton」檢查驗證,並且我想首先檢查「first_name」和「last_name」是否通過了驗證,並且如果他們下一次當用戶提交它將檢查所有表單。YII框架形式ajax驗證只是輸入的一部分

型號 - >規則

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

阿賈克斯按鈕查看 - >

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

     } 

} 

我如何檢查部分投入? 我在做什麼錯了?

+0

我不確定我瞭解你。你需要驗證你的表單兩次 - 第一次只驗證「first_name」和「last_name」輸入,之後你做什麼? – temni 2012-04-02 03:23:32

+0

我將驗證所有表單域。 – Dar 2012-04-02 05:51:02

回答

1

你在你的控制器中的錯誤。這:

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

應該是這樣的:

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() 
{ 
     if(isset($_POST['Message'])) 
     { 
      $model = new Message('setup'); 

這是否幫助?

+0

它的工作,但在客戶端驗證一切看起來像這樣通過驗證。儘管它不是 – Dar 2012-04-03 06:29:39

+0

客戶端驗證可能不適用於此設置,因爲您正在中途更改場景。客戶端JavaScript不會同時被重寫。相反,使用Ajax驗證可能是值得的。如果事情現在正在發揮作用,我會很感激你將我的答案標記爲解決方案。謝謝! – acorncom 2012-04-03 13:07:48

+0

我如何更改驗證,以便在用戶沒有正確輸入實際場景時驗證錯誤? – Dar 2012-04-03 13:19:25

2

使用場景兄弟

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

使一個場景「buttafuoco」(叫什麼,你會),其中只有第一個和最後一個名字是必需的

如果驗證,場景切換到'blagojevich'(一種新的場景),其中所有字段都是必需的。

您可能需要存儲在會話當前場景的名稱或變量後

+0

它不適合我。 – Dar 2012-04-02 11:56:40