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'); }
遗留问题:单条数据如何避免里面查一次外面查一次