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

  • 相关阅读:
    有关人工智能的假设
    遥感数据下载
    envi几何校正
    2440裸 Delay(); 和 while(!(rUTRSTAT0 &amp; 0x2)); 问题
    hadoop排序组合键的使用情况
    ASP.NET——RequiredFieldValidator控制和ValidationSummary控制
    TFTP server组态
    Notification(一个)——使用演示样本的基础知识
    学习计划,我希望这不会虎头蛇尾
    只有有lua编译能力不足200K代码吧?NO! Python 有可能。
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10193932.html
Copyright © 2011-2022 走看看