2017-11-13 16:07:46 4196次浏览 5条回答 1 悬赏 10 金钱

怎样实现ajax登录,当用户名或密码错误的时候,获取到rules中的错误信息

最佳答案

  • peng 发布于 2017-11-13 19:58 举报

    controller:

    $model = new RegForm();
    $model->setScenario ('add');
    
    if ( $model->load ( Yii::$app->request->post () ) ) {
    
    	if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    		Yii::$app->response->format = Response::FORMAT_JSON;
    		$model->setScenario ('ajax');
    		return ActiveForm::validate($model);
    	}
    	// ...
    	if($model->signUp()){
    		return $this->redirect(['site/login']);
    	}
    }
    

    model:

    public function rules () {
    	return [
    		[ [ 'email', 'verifycode' ], 'filter', 'filter' => 'trim', 'on'=>['add', 'ajax'] ],
    		[ [ 'email', 'password', 'verifycode' ], 'required', 'message' => '不能为空', 'on'=>['add', 'ajax'] ],
    		[ 'email', 'email', 'message' => '邮箱格式不正确', 'on' => [ 'add', 'ajax' ] ],
    		[ 'verifycode', 'captcha', 'message' => '验证码不正确', 'on'=>['add'] ],
    	];
    }
    

    view:

    <?php $form = ActiveForm::begin ( [
    	'id'          => 'reg-form',
    	'enableAjaxValidation'=>true,
    	'options'     => [ 'class' => 'form-horizontal'],
    ] ); ?>
    ...
    

    大概是这样

    3 条回复
    回复于 2017-11-14 09:01 回复

    好像yii2自带的登录就是ajax的,错误信息可以用{error}。我最想要实现的是,错误信息弹窗显示,大哥你有做过吗

    回复于 2017-11-14 10:55 回复

    不大明白你什么意思,是实现弹窗还是获取错误信息, 如果是获取错误信息的话, model验证的错误信息都在 $model->errors里面, 你dump一下看看就知道了;

    回复于 2017-11-14 11:09 回复

    我是想在视图层以弹窗的形式展示错误信息

  • 回答于 2017-11-13 17:20 举报

    直接通过json返回吧

  • 回答于 2017-11-13 22:53 举报

    兄弟,你这个是自己不想写了吧,类似于外包?

  • 回答于 2017-11-14 11:24 举报

    http://www.yiichina.com/doc/guide/2.0/input-forms

    use yii\widgets\Pjax;
    use yii\widgets\ActiveForm;
    Pjax::begin([]);
        $form = ActiveForm::begin([
            'options' => ['data' => ['pjax' => true]],
        ]);
        ActiveForm::end();
    Pjax::end();
    

    记得采纳我的答案。

    2 条回复
    回复于 2017-11-14 14:38 回复

    yii2 自带的登录就是ajax了,我想实现错误信息弹窗展示

    回复于 2017-11-14 15:56 回复

    {error}这么写

  • 回答于 2017-11-14 23:50 举报

    $model->errors获取错误信息后,你用json返回错误信息给前端,弹窗不弹窗的前端决定

    5 条回复
    回复于 2017-11-15 08:59 回复

    $model->errors获取到的是一个数组,用户名不能为空{"code":false,"message":{"username":["用户名不能为空。"]}},然后密码不能为空{"code":false,"message":{"password":["用户名不能为空。"]}}。然后我要一段代码获取错误信息呢

    回复于 2017-11-15 10:10 回复

    array_values($model->getFirstErrors())[0];

    回复于 2017-11-15 10:16 回复

    谢谢,正解

    回复于 2017-11-20 10:09 回复

    正解

    回复于 2017-11-20 10:14 回复

    1

您需要登录后才可以回答。登录 | 立即注册
pengcx
CEO

pengcx 鹭岛

注册时间:2017-04-21
最后登录:2022-11-08
在线时长:100小时57分
  • 粉丝1
  • 金钱17010
  • 威望10
  • 积分18110

热门问题