Laravel Form 表单的数据校验

更新日期: 2018-12-14 阅读次数: 3771 分类: 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

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年02月24日 第三世界青年日
2020年02月24日 龙抬头
2020年02月28日 世界居住条件调查日
2020年03月01日 国际海豹日
2020年03月03日 全国爱耳日
2020年03月05日 学雷锋日
2020年03月05日 惊蛰
2020年03月08日 三八妇女节
2020年03月12日 植树节
2020年03月14日 白色情人节
2020年03月15日 消费者权益日
2020年03月17日 国际航海日
查看更多节日