BaseValidate内容
<?php
namespace app\validate;
use think\Exception;
use think\Validate;
class BaseValidate extends Validate
{
/**
* 按scene规则,获取并验证请求数据
* @throws \Exception
*/
public function readScene($scene)
{
if(!isset($this->scene[$scene])){
throw new Exception('操作类型不存在');
}
if($this->scene[$scene]){
$fields = $this->scene[$scene];
$params = request()->param($this->scene[$scene]);
//补充未传字段
foreach ($fields as $f){
if(!isset($params[$f])){
$params[$f] = null;
}
}
$result = $this->scene($scene)->check($params);
if(!$result){
throw new Exception($this->error);
}
}
else{
$params=[];
}
return $params;
}
}
调用
public function change()
{
$action = request()->action();
$params = (new \app\validate\Fee())->readScene($action);
halt($params);
}
验证器内容

注意!!!
add和edit两个方法某个字段冲突时可以按照以下两种方式处理
1.requireIf 方法 ,传参传进来需要有action参数,值就是当前方法名
2.重新定义验证场景 如下sceneEdit
protected $rule = [
'name' => 'requireIf:action,addPackage',
'day' => 'require',
'price' => 'require',
];
public function sceneEdit()
{
return $this->only(['name','age'])
->append('name', 'min:5')
->remove('age', 'between')
->append('age', 'require|max:100');
}
遗留问题:单条数据如何避免里面查一次外面查一次
