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