【问题标题】:YII framework form ajax validation only part of inputYII 框架表单 ajax 验证只是输入的一部分
【发布时间】:2012-04-01 14:06:19
【问题描述】:

我有使用 yii 框架构建的表单。 前 2 个输入是“first_name”和“last_name”,我还有更多相同形式的输入。 我正在使用“ajaxSubmitButton”检查验证,我想首先检查“first_name”和“last_name”是否通过验证,如果下次用户提交时他们会检查所有表单。

模型 -> 规则

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

视图上的 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";
              }

        }

}

如何检查部分输入? 我做错了什么?

【问题讨论】:

  • 我不确定我是否理解你。您需要验证您的表单两次 - 第一次仅验证“first_name”和“last_name”输入,然后您会做什么?
  • 在我验证所有表单字段之后。

标签: php ajax validation yii


【解决方案1】:

使用场景兄弟

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

制作一个场景“buttafuoco”(随便你怎么称呼它),其中只需要名字和姓氏

如果验证成功,请将场景切换到需要所有字段的“blagojevich”(新场景)。

您可能必须将当前场景名称存储在 session 或 post 变量中

【讨论】:

    【解决方案2】:

    您的控制器中有错误。这个:

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

    这有帮助吗?

    【讨论】:

    • 它可以工作,但在客户端验证中,一切看起来都通过了验证。尽管不是
    • 客户端验证可能不适用于此设置,因为您正在中途更改场景。客户端 JavaScript 不会同时被重写。可能值得使用 Ajax 验证。如果现在一切正常,我会很感激您将我的答案标记为解决方案。谢谢!
    • 如何更改验证,以便如果用户未在场景中实时正确输入字段,则会引发错误?
    • 好问题 :-) 我不确定,因为我在 Ajax 验证方面做得不多。我认为您需要检查您的控制器以查看您的用户名/密码验证方案是否通过,如果通过,则更改模型上的方案(如我的第一个示例中),然后尝试重新验证。但可能值得另一个问题来获得更多意见
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多