laravel 更新验证

public function update(Request $request, User $user)
    {
        // 验证规则.
        $rules = [
            'email' => [
                'nullable',
                'email',
                Rule::unique('users', 'email')->ignore($user->id),
            ],
            'name' => [
                'required',
                'username',
                'min:2',
                'max:12',
                Rule::unique('users', 'name')->ignore($user->id),
            ],
            'phone' => [
                'nullable',
                'cn_phone',
                Rule::unique('users', 'phone')->ignore($user->id),
            ],
            'roles' => [
                'required',
                'array',
                Rule::in(Role::all()->keyBy('id')->keys()->toArray()),
            ],
        ];

        // 消息
        $messages = [
            'email.email' => '请输入正确的 E-Mail 格式',
            'email.unique' => '邮箱已经存在',
            'name.required' => '请输入用户名',
            'name.username' => '用户名只能以非特殊字符和数字开头,不能包含特殊字符',
            'name.min' => '用户名最少输入两个字',
            'name.max' => '用户名最多输入十二个字',
            'name.unique' => '用户名已经被其他用户所使用',
            'phone.cn_phone' => '请输入大陆地区合法手机号码',
            'phone.unique' => '手机号码已经存在',
            'roles.required' => '必须选择用户组',
            'roles.array' => '发送数据格式错误',
            'roles.in' => '选择的用户组中存在不合法信息',
        ];

        $this->validate($request, $rules, $messages);

        foreach ($request->only(['email', 'name', 'phone']) as $key => $value) {
            $user->$key = $value ?: null;
        }
        $oldPwdHash = $user->getImPwdHash();
        if ($password = $request->input('password')) {
            $user->createPassword($password);
        }

        $easeMob = new EaseMobController();

        $response = app('db.connection')->transaction(function () use ($user, $request, $easeMob, $oldPwdHash) {
            $user->save();
            $user->roles()->sync(
                $request->input('roles')
            );

            // 环信重置密码
            $request->user_id = $user->id;
            $request->old_pwd_hash = $oldPwdHash;
            $im = $easeMob->resetPassword($request);
            if ($im->getStatusCode() != 201) {
                return false;
            }

            return true;
        });

        return response()->json([
            'messages' => [
                $response === true ? '更新成功' : '更新失败',
            ],
        ])->setStatusCode($response === true ? 201 : 422);
    }
posted @ 2019-03-20 14:18  心之所依  阅读(750)  评论(0编辑  收藏  举报