最近在学习tp5.1,沿用5.0的代码发现不能触发验证,打开thinkphp5.1官方手册发现,原来的写法只能验证全部或者不验证全部规则,但是不能为去掉某个不需要的验证规则。
以下是thinkphp5.0的验证规则,验证提示和验证场景写法:
<?php namespace app\admin\validate; use think\validate; class Admin extends validate { protected $rule=[ 'uname'=>'require|unique:admin', 'groupid'=>'require', 'password'=>'require|min:6', ];
protected $message=[ 'uname.require'=>'管理员名称不得为空!', 'uname.unique'=>'管理员名称不得重复!', 'groupid.require'=>'所属用户组不得为空', 'password.require'=>'管理员密码不能为空!', 'password.min'=>'管理员密码不能少于6位!', ]; protected $scene=[ 'add'=>['uname','password','groupid'], 'edit'=>['uname','password'=>'min:6','groupid'], ]; }
在thinkphp5.1中,需要重新定义验证场景来触发验证,需要的验证写在only里面,不需要(移除)的验证规则写在remove里面,另外还可以追加字段验证append,以下是thinkphp5.1的验证规则,验证提示和验证场景写法:
<?php
namespace app\admin\validate;
use think\Validate;
class Cate extends Validate{
protected $rule = [
'pid' => 'require|number',
'catename' => 'require|min:3|max:60|unique:cate',
'title' => 'require|min:3|max:60',
];
protected $message = [
'pid.require' => '请选择上级栏目',
'pid.number' => '上级栏目id错误',
'catename.require' => '请填写栏目名称',
'catename.min' => '栏目名称过短',
'catename.max' => '栏目名称过长',
'catename.unique' => '栏目名称重复',
'title.require' => '请填写栏目标题',
'title.min' => '栏目标题过短',
'title.min' => '栏目标题过长',
];
//tp5.1验证场景,前面加上scene,自动匹配验证;remove为要删除的规则
public function sceneAdd(){
return $this->only(['pid','catename','title'])->remove();
}
public function sceneEdit(){
return $this->only(['catename','title'])->remove('catename',['require','unique']);
}
}