Yii2动态模型与Ajax数据缺失问题

Yii2动态模型与Ajax数据缺失问题,ajax,dynamic,model,yii2,Ajax,Dynamic,Model,Yii2,我在控制器中只获得部分数据。情况是这样的 我在控制器中的操作,该控制器使用以下表单显示视图: $model_sms = array(); $model_sms = new \yii\base\DynamicModel(['sms_code', 'iduser', 'mail_status', 'signup_control']); $model_sms->addRule(['sms_code, iduser, mail_status, sig

我在控制器中只获得部分数据。情况是这样的

我在控制器中的操作,该控制器使用以下表单显示视图:

$model_sms = array();
            $model_sms = new \yii\base\DynamicModel(['sms_code', 'iduser', 'mail_status', 'signup_control']);
            $model_sms->addRule(['sms_code, iduser, mail_status, signup_control'], 'required');
            $model_sms->addRule(['iduser, mail_status, signup_control'], 'integer');
            $model_sms->addRule('sms_code', 'string', ['min' => 5, 'max' => 5]);
            $model_sms->iduser = $user->id;
            $model_sms->mail_status = $mail_status;
            $model_sms->signup_control = 1;


            return $this->renderAjax('_sms_confirmation', ['model_sms' => $model_sms]);
那么视图代码就在这里

<?php
use yii\helpers\Html;
use kartik\form\ActiveForm;
?>

<div class=" site-login">

    <?php $form = ActiveForm::begin(['id' => 'frmsmsconfirm', 'action'=>'/index.php?r=site/confirmsms']); ?>
    <div class="row">
        <div class="col-md-1">
        </div>    
        <div class="col-md-10">
            <div class="formSeparator"><span>Enter SMS code</span></div>
            <p class="logtxt">Please fill out the following fields to login:</p>
            <?php
                                echo $form->field($model_sms, 'iduser')->hiddenInput()->label(false);
                                echo $form->field($model_sms, 'mail_status')->hiddenInput()->label(false);
                                echo $form->field($model_sms, 'signup_control')->hiddenInput()->label(false);

                echo $form->field($model_sms, 'sms_code', [
                    'feedbackIcon' => [
                        'default' => 'phone',
                        'success' => 'ok',
                        'error' => 'exclamation-sign',
                        'defaultOptions' => ['class'=>'cw']
                    ]
                ])->textInput(['placeholder'=>'Enter SMS code', 'class'=>'newxinput xinput'])->label('SMS code');
            ?>
        </div>
        <div class="col-md-1">
        </div>      
    </div>

    <div class="row">
        <div class="col-md-1">
        </div>  
        <div class="col-md-10">
            <div class="scforget">
                    If you did not receive SMS <?= Html::a('send it again', ['site/smsresend']) ?>.
            </div>
        </div>
        <div class="col-md-1">
        </div>      
    </div>
    <div class="row">
        <div class="col-md-1">
        </div>  
        <div class="col-md-10"><br><br>
            <div class="form-group">
                <?= Html::submitButton('Submit', ['class' => 'xsubbtn', 'name' => 'login-button']) ?>
            </div><br><br>
        </div>
        <div class="col-md-1">
        </div>      
    </div>
    <?php ActiveForm::end(); ?>
</div>

<script>
 $('#frmsmsconfirm').on('submit', function(e){
             e.preventDefault();
             e.stopImmediatePropagation();
             var form = $(this);
             alert('ajax start');
             alert(form.serialize());

            $.ajax({
                     url    : form.attr('action'),
                     type   : 'post',
                     data   : form.serialize(),
                    success: function (response)
                    {
                        alert('radi a ne radi... hm');
                       $('#sc_content').html(response);

                    },
                    error: function ()
                    {
                        console.log('internal server error');
                    }
                });
        });


            </script>

输入短信代码

请填写以下字段以登录:

如果你没有收到短信。



$('frsmsconfirm')。在('submit',函数(e)上{ e、 预防默认值(); e、 停止即时复制(); 变量形式=$(此); 警报(“ajax启动”); 警报(form.serialize()); $.ajax({ url:form.attr('action'), 键入:“post”, 数据:form.serialize(), 成功:功能(响应) { 警报('radi a ne radi…hm'); $('sc#u content').html(回复); }, 错误:函数() { log(“内部服务器错误”); } }); });
我在警报(serialize.form)中获得了所有正确的数据,但当它传递给控制器中的另一个操作时,我只得到sms_代码,其他3个字段为空。。。这是代码

         $model_sms = array();

        $model_sms = new \yii\base\DynamicModel(['sms_code', 'iduser', 
        'mail_status', 'signup_control']);
            $model_sms->addRule(['sms_code, iduser, mail_status, 
      signup_control'], 'required');
            $model_sms->addRule(['iduser, mail_status, signup_control'], 
       'integer');
            $model_sms->addRule('sms_code', 'string', ['min' => 5, 'max' => 
     5]);
    $model_sms->load(Yii::$app->request->post());


        echo $model_sms->sms_code.'- xxx - <br>';
        echo $model_sms->iduser.'- xxx - <br>';
        echo $model_sms->mail_status.'- xxx - <br>';
        echo $model_sms->signup_control.'- xxx - <br>';

       exit;
$model_sms=array();
$model\u sms=new\yii\base\DynamicModel(['sms\u code','iduser',',
“邮件状态”、“注册控制”];
$model\u sms->addRule(['sms\u代码、iduser、mail\u状态、,
注册控制“],“必需”);
$model\u sms->addRule(['iduser,mail\u status,signup\u control'],
“整数”);
$model\u sms->addRule('sms\u code','string',['min'=>5',max'=>
5]);
$model_sms->load(Yii::$app->request->post());
echo$model_sms->sms_code.-xxx-
; echo$model_sms->iduser.-xxx-
; echo$model_sms->mail_status.-xxx-
; echo$model_sms->signup_control.-xxx-
; 出口
有人知道吗?
谢谢

您的2 addRule()定义有错误:

$model_sms->addRule(['sms_code, iduser, mail_status, signup_control'], 'required');
$model_sms->addRule(['iduser, mail_status, signup_control'], 'integer');
应该是:

$model_sms->addRule(['sms_code', 'iduser', 'mail_status', 'signup_control'], 'required');
$model_sms->addRule(['iduser', 'mail_status', 'signup_control'], 'integer');

The 1st parameter of addRule should be an array of attributes.