thinkphp5 validate系统内置了一些常用的规则,如果不能满足需求,可以在验证器重添加额外的验证方法,即自定义方法验证数据
比如,自定义方法,验证某字段值,数据库中是否已经存在,这就涉及到添加的时候验证数据表的所有记录,修改的时候要验证除当前id之外的所有记录,当前主键id怎么传递到自定义方法里面呢?
validate验证器
namespace app\admin\validate;
use think\Validate;
use think\Db;
/**
* 菜单权限验证器
*/
class Privilege extends Validate{
protected $rule = [
'menuId' => 'require',
'privilegeTitle' => 'require',
'privilegeCode' => 'require|checkPrivilegeCode:1',
];
protected $message = [
'menuId.require' => '菜单不能为空',
'privilegeTitle.require' => '权限名称不能为空',
'privilegeCode.require' => '账号不能为空',
];
protected $scene = [
'add' => ['menuId','privilegeTitle','privilegeCode'],
'edit' => ['menuId','privilegeTitle','privilegeCode'],
];
protected function checkPrivilegeCode($value,$rule,$data=[]){
$where = [];
$where[] = ['dataFlag','=',1];
$where[] = ['privilegeCode','=',$value];
if($data['privilegeId'] > 0){
$where[] = ['privilegeId','<>',$data['privilegeId']];
}
$rs = Db::name('privilege')->where($where)->count();
return ($rs==0)?true:'权限代码已存在';
}
}
model模型
添加
$validate = new validate();
if(!$validate->scene('add')->check($data))
修改
$validate = new validate();
if(!$validate->scene('edit')->check($data))