2012-04-01 159 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