对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节。无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型、大小、格式等等做这样或者那样的校验,然后才进行逻辑处理,以确保逻辑处理时万无一失,不会出现异样。于是乎,在controller层中就会出现一大坨的校验代码,这些校验代码甚至有时候都超过了正常的逻辑代码的数量,对于程序的扩展和维护很不利的。
但是,laravel为我们提供了一个很好的服务去解决参数校验这个问题,它就是----Validate。
首先,我们需要建一个路由,暂时就叫"test"吧,然后test对应着TestController中的test方法。
Route::get('test', 'TestController@test'); class TestController extends Controller { public function test(Request $request) { } }
假设请求的参数中需要id、title这两个参数,并且id必须是数字,且长度是1到10,并且是DB中的一行数据的主键、title必须是字符串,id和title都不能为空。一般的框架在写的时候就会先取到id和title,然后对取到的id和title进行“是否是空”、“是否长度在1到10之间”、“通过id能否在数据库中找到数据”等等繁琐的校验,利用laravel的“Validate”你只需要这样就可以了。
public function test(Request $request) { $validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10', 'title' => 'required|string' ]);
如果没有错误,就会继续往下进行逻辑处理。假如说校验不通过,例如id不在1和10之间,可以通过“validate”实例中的“errors()”方法,得到所有的错误,然后将错误放回给客户端,如果想返回错误队列中的头一个错误,就写$validate->errors()->first(),如果想返回所有错误列表,就写“$validate->errors()->all()”。如下:
if($validate->fails()) { return $validate->errors()->first(); }
或者返回
if($validate->fails()) { return $validate->errors()->all(); }
假如请求参数中的id不是一个数字,而是字符串,结果就会出现:
你可能会想:返回结果能否使中文?答案当然是可以,你可以针对自己的程序,换成你任何想要的语言:
在项目中找到“resources”目录下的“lang” 中的 “en”文件夹中的“validation.php”文件,
打开,然后找到这一行: