zoukankan      html  css  js  c++  java
  • Laravel Form 表单的数据校验

    例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 form 表单时,就不得不对提交的手机号及验证码做基本的数据校验。

    手写规则,非常浪费时间。使用 laravel 内置的 validation 功能可以节省大量的代码及时间,而且可读性好一万倍。

    新建一个 request

    php artisan make:request LoginPost
    

    使用独立的 form request validation 的原因是,可以方便的自定义错误信息。

    此时会新增一个 request 文件 app/Http/Requests/LoginPost.php

    在其中设置校验规则,及定制化的错误信息。(默认是英文错误信息)

    public function rules()
    {
        return [
            'tel' =>'required|regex:/^1[0-9]{10}$/',
            'code' => 'required|digits:6',
        ];
    }
    
    public function messages()
    {
        return [
            'tel.required' => '请填写手机号',
            'tel.regex'  => '手机号格式错误',
            'code.required' => '请填写验证码',
            'code.digits'  => '验证码格式错误',
        ];
    }
    

    注意,不要忘记将生成的 request 文件中的 authorize 函数中的 return false 改成 return true.

    建立验证规则之后,需要将 controller 中对应的处理函数的 Request 替换成定制化的 Request.

    例如

    public function login(Request $request) 
    

    替换成

    public function login(LoginPost $request) 
    

    如果提交的数据没有通过验证规则,则 laravel 会自动将请求重定向到之前的请求路径。

    在 blade 模板中显示错误信息

    @if ($errors->any())
    <div class="jd_login_panle_input" style="padding: 0 26px; font-size: 13px; color: red;">
    	<ul>
    		@foreach ($errors->all() as $error)
    		<li>{{ $error }}</li>
    		@endforeach
    	</ul>
    </div>
    @endif
    

    内置的校验规则

    https://laravel.com/docs/5.5/validation#available-validation-rules

    增加业务流程相关的校验错误信息

    例如,验证码不匹配这样的错误,在 laravel 内置的校验规则中是无法实现的,这就需要自己去实现。

    然后当校验失败时,append 定制化的错误信息。

    // 验证码校验
    $redis_code = Redis::get(env('APP_NAME').'sms'.$tel);
    if ($redis_code != $code) {
        $validator = Validator::make($request->all(), []);
        $validator->errors()->add('code', '验证码错误');
        return redirect('/login')->withErrors($validator)->withInput();
    }
    

    参考

    https://laravel.com/docs/5.5/validation

  • 相关阅读:
    Windows性能计数器应用
    Azure Oracle Linux VNC 配置
    Azure 配置管理系列 Oracle Linux (PART6)
    Azure 配置管理系列 Oracle Linux (PART5)
    Azure 配置管理系列 Oracle Linux (PART4)
    Azure 配置管理系列 Oracle Linux (PART3)
    Azure 配置管理系列 Oracle Linux (PART2)
    vagrant多节点配置
    docker基本操作
    LINUX开启允许对外访问的网络端口命令
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10193932.html
Copyright © 2011-2022 走看看