ThinkPHP 5.1 验证器的正确使用

最近在使用Validate的时候,突然遇到一个问题,困扰好久了,一直没找到解决方案,甚至还去看了流年写的源码,还是没发现具体什么原因,直到今天无意中发现了问题所在

演示代码

控制器:

在控制器调用了验证器,传递的场景值是”get_list_by_page”,这样的话,只会校验该场景值对应的校验规则

验证器:

因为某些情况,临时不想校验”get_list_by_page”对应的规则,就简单把对应的三行代码注释了下

请求返回:

在请求该接口的时候,居然给我返回了 “get_detail”对应的校验规则(详情 id 不能为空),很是奇怪,我明明没有调用该场景呀。注释来注释去也没见有解决,就放弃了,今天无意间一行行删除注释,一次次调试,终于发现问题了。

解决方案:

当你使用了验证器某个场景的时候,需要在protected $scene = [];里填写对应的场景值,如上图所示,如果你不打算校验任何参数的话,可以只写一个[”],记得其中的”不能少或者干脆注释掉控制器当中的验证

示例代码:

“`

protected $scene = [
    //分页获取列表
    'get_list_by_page' => [''],
    //详情
    'get_detail' => ['id'],
];

“`

官方文档地址:https://www.kancloud.cn/manual/thinkphp5_1/354104

 

Tagged , ,