2016-12-15 15:42:06 2700次浏览 2条回答 1 悬赏 10 金钱

Controller代码:

                $model = new \advanced\models\User;
		//设置scenario
		$model->setScenario( 'abc' );

		//默认显示
		if ( !Yii::$app->request->isPost ) {
			return $this->render( 'login', [ 'model' => $model ] );
		}

		//接收参数并验证
		if ( $model->load( $post = Yii::$app->request->post() ) && $model->validate() ) {
			echo '跳转到用户中心去';
		}
		var_dump($model->getErrors());

model部份


    //设置场景
    public function scenarious()
    {
        return [
            'login' => 'mobilenumber,password',
            'register' => 'mobilenumber,email,password,sex',
        ];
    }
    public function rules()
    {
        return [
            [ [ 'mobilenumber', 'password' ], 'required', 'on' => 'login' ],
            [ [ 'password' ], 'validatePassword', 'on' => 'login' ],
        ];
    }

view代码

<?php $form = ActiveForm::begin( [
          'id' => 'login',
          'enableAjaxValidation' => true,
          'validationUrl' => Url::toRoute( [ 'validate-form' ] ),
        ] ); ?>
                      <?= $form->field( $model, 'mobilenumber' )->textInput( [ 'placeholder' => 'Username', 'class' => 'form-control input-lg' ] )->label(false); ?>

                    
                       <?= $form->field( $model, 'password' )->passwordInput( [ 'placeholder' => 'Password', 'class' => 'form-control input-lg' ] )->label(false); ?>
<?= Html::submitButton( 'Login', [ 'class' => 'btn btn-primary' ] ); ?>
        <?php ActiveForm::end(); ?>

结果点击login以后,跳转页面打印出errors

 array(1) { ["password"]=> array(1) { [0]=> string(31) "Incorrect username or password." } }

求解呐~

最佳答案

  • bryson 发布于 2016-12-15 18:08 举报

    補充樓上
    建議 看一下 scenarios 的實作, (底下有附上連結)
    你的 methodName 好像也拼錯
    而且 scenarios 內部的情境應該是接陣列巴 (字串我是沒用過~~)

        ex: 'login' => ['mobilenumber', 'password'],
    

    http://www.yiiframework.com/doc-2.0/guide-structure-models.html#scenarios

    2 条回复
    回复于 2016-12-16 10:05 回复

    这里我应该是我的锅。。= 0 =这一块应该是属性没有分成功,但问题应该不是这一块。。。能用getErrors()获取出来也是证明能够验证成功的。。。我后面又加了一段return $this->render( 'xxxx' );重新渲染了就OK了。。

    回复于 2016-12-16 10:06 回复

    还是得谢谢你啦,至少这个我没注意到。。

  • 回答于 2016-12-15 17:17 举报

    你的那个控制器中,设置场景,场景名与数据中的不匹配, 然后, 先打印是否post传值存在,然后判断load加载是否成功,然后判断validate()是否成功; "Incorrect username or password":用户名或密码错误

    2 条回复
    回复于 2016-12-16 10:02 回复

    那个我是正解的,因为放上来手打的,结果不小心打错了,修改了几次也没成功,就只能这样 = - =...能用getErrors()获取出来也是证明能够验证成功的。。。我后面又加了一段return $this->render( 'xxxx' );重新渲染了就OK了。。

    回复于 2016-12-16 10:06 回复

    还是得谢谢你~

您需要登录后才可以回答。登录 | 立即注册
xiam
试用期

xiam

注册时间:2016-05-01
最后登录:2017-01-04
在线时长:2小时27分
  • 粉丝0
  • 金钱10
  • 威望0
  • 积分30

热门问题