laravel 表单验证之自定义验证规则

2022-09-11 12:44:20 浏览数 (3)

以添加用户为例

主要验证的字段

代码语言:javascript复制
tusername、username、password、phone
辅助验证的字段 password_confirmation

验证第一种:

代码语言:javascript复制
 //添加操作
    public function store(Request $request)
    {
        $this->validate($request, [
            'tusername' => 'required',
            'username'  => 'required|unique:users,username',
            'password'  => 'required|confirmed|digits_between:6,16',
            'phone'     => 'nullable|phone'
        ],[
            'tusername.required' => '真实姓名不能为空',
            'password.confirmed' => '两次密码不一致',
            'password.digits_between' => '密码字符必须在6到16个字符',
            'phone.phone' => '手机号不合法'  
        ]);

        $post = $request->except(['_token','password_confirmation']);
        $pwd = $post['password'];
        $post['password'] = bcrypt($pwd);
        $user = User::create($post);
        /**
         * 发邮件
         * 发送类Mali类(静态方法)
         * 文本raw()
         * 富文本send()
         * 发送邮件的账号,需要开启stmp协议。
         * stmp默认端口是25,默认未打开,需自行打开。
         * 以QQ邮箱为例:mail.qq.com
         */
        /*发送富文本*/
        Mail::send('mail.adduser',compact('user','pwd'), function (Message $message)use ($user){
            $message->to($user->email)
                ->subject('开通账号邮件通知');
        });

        return redirect(route('admin.user.index'))->with('success','添加用户成功');
    }
或者这样
//添加操作
    public function store(Request $request)
    {
        $this->validate($request, [
            'tusername' => 'required',
            'username'  => 'required|unique:users,username',//用户名唯一性验证
            'password'  => 'required|confirmed|digits_between:6,16',
            'phone'     => 'nullable|phone'
        ],[
            'tusername.required' => '真实姓名不能为空',
            'password.confirmed' => '两次密码不一致',
            'password.digits_between' => '密码字符必须在6到16个字符',
        ]);

        $post = $request->except(['_token','password_confirmation']);
        $pwd = $post['password'];
        $post['password'] = bcrypt($pwd);
        $user = User::create($post);
        /**
         * 发邮件
         * 发送类Mali类(静态方法)
         * 文本raw()
         * 富文本send()
         * 发送邮件的账号,需要开启stmp协议。
         * stmp默认端口是25,默认未打开,需自行打开。
         * 以QQ邮箱为例:mail.qq.com
         */
        /*发送富文本*/
        Mail::send('mail.adduser',compact('user','pwd'), function (Message $message)use ($user){
            $message->to($user->email)
                ->subject('开通账号邮件通知');
        });

        return redirect(route('admin.user.index'))->with('success','添加用户成功');
    }
//Providers->AppServiceProvider.php 
 public function boot()
    {
        //
        //自定义规则(参数1:规则名称)
        Validator::extend('phone', function ($attribute, $value, $parameters, $validator) {
            $reg0 = '/^ 86-1[3-9]d{9}$/';
            $reg1 = '/^1[3-9]d{9}$/';
            return preg_match($reg0, $value) || preg_match($reg1, $value);
        });
    }
或者在resources->lang->zh-CN->validation
 //自定义提示
 'phone'        => ':attribute  号码不合法',
 attributes     =>  [
           'phone'                 => '电话'
]

1 人点赞