首先是驗證層的定義
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
protected $message = [
'name.require' => '名稱必須',
'name.max' => '名稱最多不能超過25個字符',
'age.number' => '年齡必須是數字',
'age.between' => '年齡只能在1-120之間',
'email' => '郵箱格式錯誤',
];
在對應的user層可以使用
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
];
$validate = new \app\index\validate\User;
if (!$validate->check($data)) {
dump($validate->getError());
}
}
}
這是一種比較典型的使用驗證層的方法
還有就是一種數據驗證
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'checkName:thinkphp',
'email' => 'email',
];
protected $message = [
'name' => '用戶名必須',
'email' => '郵箱格式錯誤',
];
// 自定義驗證規則
protected function checkName($value,$rule,$data=[])
{
return $rule == $value ? true : '名稱錯誤';
}
}
當然在任何時候都可以在controller層進行驗證數據,而不需要去Validata層追加文件進行規則寫入
前提是use think\Validate;
$validate = Validate::make([
'name' => 'require|max:25',
'email' => 'email'
]);
還有就是規則的驗證場景定義:
例如我們對用戶的入庫操作數據需要進行驗證,
但是后期唯一操作不需要在進行驗證操作等實際應用:
$data = [
'name' => 'thinkphp',
'age' => 10,
'email' => 'thinkphp@qq.com',
];
$result = $this->validate($data,'app\index\validate\User.edit');
if(true !== $result){
// 驗證失敗 輸出錯誤信息
dump($result);
}