laravel笔记-验证
来源:互联网 发布:如何禁止某个软件运行 编辑:程序博客网 时间:2024/06/05 10:17
laravel笔记-验证
写在前面
时间可贵,善用目录↑
学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。
什么是验证?
你前端不能一直只是页面跳来跳去吧,得有个表单啥的像后台提交点数据吧。
然后就是在哪验证,这个有很多种:
控制器中 $this->validate()
请求中rules()
在任何地方Validator::make()
如何验证
在控制器中
Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验证规则来验证输入的 HTTP 请求。
下面为一段控制器中的代码(一个方法):
/** * 存储博客文章 * * @param Request $request * @return Response */public function store(Request $request){ //验证请求,按顺序验证 $this->validate($request, [ // '参数名' => '规则1|规则2' 'title' => 'required|unique:posts|max:255', //注意这里的bail,存在这个规则的验证向不通过时直接跳出不继续验证 'body' => 'bail|required', //这里是对数组的验证,使用'.'解析 'author.name' => 'required', 'author.description' => 'required', ]); // 验证通过,存储到数据库...}
验证后如果出现错误,laravel会重定向到上一个页面并将错误信息全部存在session中。
处理错误信息
自定义错误格式
自定义保存在session中的验证错误信息的格式,需要在控制器基类中重写formatValidationErrors方法
不要忘了在该控制器类的顶部导入Illuminate\Contracts\Validation\Validator类
namespace App\Http\Controllers;use Illuminate\Foundation\Bus\DispatchesJobs;use Illuminate\Contracts\Validation\Validator;use Illuminate\Routing\Controller as BaseController;use Illuminate\Foundation\Validation\ValidatesRequests;abstract class Controller extends BaseController{ use DispatchesJobs, ValidatesRequests; /** * {@inheritdoc} */ protected function formatValidationErrors(Validator $validator) { return $validator->errors()->all(); }}
在请求中
在一些情况下,我们可能需要定义一个’表单请求’来处理某些特定的请求。
使用验证
我们可以通过如下Artisan命令来自定义一个请求:
php artisan make:request StoreBlogPost
生成的类位于app/Http/Requests目录下,接下来我们添加少许验证规则到rules方法:
/** * 获取应用到请求的验证规则 * * @return array */public function rules(){ return [ //规则同上文~ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ];}
这样,只要在控制器中使用该类型的请求就可以自动验证了:
/** * 存储输入的博客文章 * * @param StoreBlogPostRequest $request * @return Response */public function store(StoreBlogPost $request){ // The incoming request is valid...}
值得一说的是,在Request类中还有一个方法authorize()
,这个方法被用来验证检查认证用户是否有资格更新指定资源。
例如,用户要编辑一篇文章的评论,要验证评论的归属:
/** * Determine if the user is authorized to make this request. * * @return bool */public function authorize(){ //这里Comment为评论的模型 $comment = Comment::find($this->route('comment')); //判断是否有资格 return $comment && $this->user()->can('update', $comment);}
Route::post('comment/{comment}');
处理错误信息
自定义错误格式
重写请求基类(App\Http\Requests\Request)中的formatErrors方法即可.
不要忘记在文件顶部导入Illuminate\Contracts\Validation\Validator类
/** * {@inheritdoc} */protected function formatErrors(Validator $validator){ return $validator->errors()->all();}
自定义错误消息
重写messages方法自定义表单请求使用的错误消息.
/** * Get the error messages for the defined validation rules. * * @return array */public function messages(){ return [ 'title.required' => 'A title is required', 'body.required' => 'A message is required', ];}
使用Validator门面
使用验证
使用Validator门面的make方法,我们可以更加随意的验证信息。
比如:
/** * 存储新的博客文章 * * @param Request $request * @return Response */ public function store(Request $request) { //第一个参数是需要验证的数据,第二个参数是要应用到数据上的验证规则。 $validator = Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); //满足$input->games不小于100时验证reason $v->sometimes('reason', 'required|max:500', function($input) { return $input->games >= 100; }); //如果希望在验证完成后添加回调函数,使用after方法,如下 $validator->after(function($validator) { if ($this->somethingElseIsInvalid()) { $validator->errors()->add('field', 'Something is wrong with this field!'); } }); //判断验证结果 if ($validator->fails()) { //重定向 return redirect('post/create') //将错误数据一次性存放到session,$errors会被填充 //withErrors()接收一个验证器、或一个MessageBag,或PHP数组 //如果一个页面有多个表单,可以传入第二个参数命名MessageBag ->withErrors($validator, 'login') ->withInput(); } // 存储博客文章... }
在view中我们可以这样获得:
{{ $errors->login->first('email') }}
如果希望自动重定向:
Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required',])->validate();
处理错误信息
调用Validator实例上的errors方法之后,将会获取一个Illuminate\Support\MessageBag实例,该实例中包含了多种处理错误信息的便利方法。在所有视图中默认有效的$errors变量也是一个MessageBag实例。
获取
//获取某字段的第一条错误信息$messages = $validator->errors();//获取某字段的所有错误信息foreach ($messages->get('email') as $message) { //}//获取数组字段的所有错误信息foreach ($errors->get('attachments.*') as $message) { //}//获取所有字段的所有错误信息foreach ($messages->all() as $message) { //}//判断消息中是否存在某字段的错误信息if ($messages->has('email')) { //}//获取指定格式的错误信息echo $messages->first('email', '<p>:message</p>');//获取指定格式的所有错误信息foreach ($messages->all('<li>:message</li>') as $message) { //}
自定义错误信息
make方法的第三个参数可以自定义错误信息
$messages = [ //注意:':attribute'占位符会被验证的字段名替换。 'required' => 'The :attribute field is required.', //对指定字段的指定错误设置信息 'email.required' => 'We need to know your e-mail address!',];$validator = Validator::make($input, $rules, $messages);
如何显示
在视图中,我们可以使用$errors变量来获得错误信息:
@if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div>@endif
$errors变量是的一个Illuminate\Support\MessageBag实例,会通过web中间件组中的Illuminate\View\Middleware\ShareErrorsFromSession中间件绑定到视图~
关于AJAX
在AJAX请求中如果验证失败,Laravel不会生成重定向响应。取而代之的,Laravel生成一个包含验证错误信息的JSON响应。该JSON响应会带上一个HTTP状态码422。
验证规则
老眼昏花了已经…….
- laravel笔记-验证
- (三)Laravel学习笔记之验证Validator
- Laravel 验证
- laravel 笔记
- Laravel笔记
- laravel笔记
- laravel 笔记
- laravel 笔记
- Laravel笔记
- laravel数据验证
- Laravel 4 验证
- laravel validator 表单验证
- laravel 验证码
- Laravel验证码类
- laravel 表单验证 (入门)
- Laravel-csrf验证错误
- laravel CURD,正则验证
- laravel表单验证
- 最新最全Java面试知识点总结
- 汇编学习笔记1
- 单链表逆转
- c3p0连接数据库时报错,连接不上Communications link failure
- Lottie- 让Android动画实现更简单
- laravel笔记-验证
- 数据结构学习笔记1
- osg 模型显示不全,闪烁问题
- linux下如何安装matlab
- Illegal key size -Java
- Java设计模式——原型模式
- App 审核被拒 2. 1 Performance: App Completeness
- C++类型转换
- 为ant指定编译java源码的jdk版本