IDEA激活码 (2020-12-03)

表单验证——为什么不要用HttpRequest的validate方法???

更加准确的标题应该是【不要随便使用httpRequest的validate方法,至少在使用他之前先理解他】
何时应该使用request->validate方法何时应该使用validator->validate方法

其实本文想讨论的只是一个很简单的问题,即:Request->validate()方法的本质是什么?

request->validate方法是对validator类相关验证方法的薄封装,以便于验证request中的表单内容。当表单内容在其他地方(比如一个数组)而不是在requst中的时候如何实现表单验证呢?当然只能使用validator相关相对朴素和基础的验证方法。
 

//以下是validtor的实现方式

$validator=Validator::make($params,$rules);

$validator->validate();

//以下是request的实现方式

$req->validate($rules);

可见唯一的区别是request的validate方法不用传递参数内容,因为reqeust中直接包含参数。两种方案相比request验证的唯一有点也就是这个了。可见这只是一个为了方便而实现的薄封装,而不是什么重大机制。

对validator手动薄封装一下即可实现ValidatorUtil.validate($params,$rules)的效果,仅仅多一个参数。多一个参数麻烦一些,但是脱离了表单来自request的束缚。

所以,你现在知道何时应该使用request->validate何时使用validator->validate了么?如果你还不知道的话,看下面结论吧。

结论

如果你的接口可以确定参数不会来自于其他源头,则可以直接使用简便的request->validate方法。比如一个详情接口,这个接口需要一个id必填参数,则此时可以使用request的validate方法。否则请尽量使用validator类实现验证,比如一个add方法,你不确定此方法的数据是来自于用户在前端提交的一个表单还是提交的一个导入文件又或者是其他的数据来源,则尽量要用validator方法来实现验证。

当然不想动脑子的话, 可以直接全部使用validator->validate方法,反正不会造成后面返工的烦恼。但是如果全部使用request->validate方法就不好说啦。