Laravel Form 表单的数据校验

更新日期: 2018-12-14 阅读次数: 2715 分类: Laravel

例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 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

爱评论不评论

近期节日

2019年08月23日 处暑
2019年09月03日 抗日胜利纪念日
2019年09月08日 白露
2019年09月08日 国际扫盲日
2019年09月10日 教师节
2019年09月13日 中秋节
2019年09月16日 国际臭氧层保护日
2019年09月16日 世界清洁地球日
2019年09月18日 "九一八"事变纪念日
2019年09月20日 国际爱牙日
2019年09月21日 国际和平日
2019年09月22日 世界无车日
查看更多节日