이 기사에서는 특정 참조 가치가 있는 ThinkPHP5 유효성 검사기의 구체적인 사용법을 주로 소개합니다. 필요한 친구들이 참고할 수 있습니다.
서문:
API 개발을 할 때, 클라이언트가 전달한 매개변수를 수락합니다. 이 매개변수는 신뢰할 수 없으며 백엔드 개발자는 이 매개변수를 확인해야 합니다. 이전 개발에서는 tp5 검증자에 대해서만 알고 있었을 뿐 그 목적은 몰랐습니다. 이전 개발 검증은 모델 필드를 기반으로 하는 경우가 많았기 때문입니다. 유효성 검사기는 API 개발에 더 적합합니다. 오늘은 유효성 검사기의 사용에 대해 간략하게 이야기하겠습니다.
1. 유효성 검사기 만들기
로 지정합니다. 유효성 검사기를 만듭니다. 클래스를 만들고 tp5의 유효성 검사 클래스를 상속하기만 하면 됩니다.
여기서 이름을 baseValidate
이제 본격적인 유효성 검사기를 만들어 보겠습니다. 예:
namespace app\index\validate; use think\Validate; class User extends Validate { protected $rule = [ 'name' => 'require|max:25', 'email' => 'email', ]; }
그런 다음 컨트롤러나 모델에서 인스턴스화한 다음
//虚拟一组数据,实际开发中是接受用户传递的数据 $data = [ 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com' ]; $validate = Loader::validate('User'); if(!$validate->check($data)){ dump($validate->getError()); }
을 호출하면 이러한 유효성 검사기 응용 프로그램이 작성됩니다. 단순화할 수 있는 것이 있는지 살펴보겠습니다.
먼저 검증해야 할 데이터는 클라이언트로부터 받은 것입니다. 그런 다음 첫 번째 단계는 데이터를 수락하는 것입니다.
그런 다음 검증에 실패하면 데이터를 검증해야 합니다. 오류 메시지 반환
이 두 단계는 인터페이스가 요청될 때마다 수행됩니다. 그런 다음 이것을 BaseValidate
namespace app\home\validate; use think\Exception; use think\Request; use think\Validate; class BaseValidate extends Validate { public function goCheck($data='') { //实例化请求对象 $requestObj=Request::instance(); //如果传入为空则获取请求里的参数 empty($data)&&$data=$requestObj->param(); if ($this->check($data)) { //如果验证通过了 return true; }else{ //如果验证没通过 $error=$this->getError(); //抛出异常 throw new Exception($error); } } }
에 캡슐화하려고 합니다. goCheck 메소드가 캡슐화된 후 누군가가 묻습니다. 확인 규칙은 어디에 있습니까?
2. 별도의 Validator 작성
앞서 BaseValidate를 상속받는다고 해서 아직 실제 Validator 작성을 시작하지 않았습니다. 규칙은 이 유효성 검사기로 공식화됩니다. 더 깊은 이해를 위해 다음은 사용자 정의 유효성 검사 규칙을 사용하는 예입니다. 사실, tp가 작성한 검증 규칙은 매우 유용할 것입니다
위의 요구 사항을 바탕으로 검증기를 만들어 보겠습니다. IdMustBePositiveInt.php라는 이름의 IdMustBePositiveInt.php라는 검증 폴더의 위치는 이전과 동일합니다
class IdMustBePositiveInt extends BaseValidate
그런 다음 규칙을 공식화하고 고정 멤버 변수에 값을 할당합니다
protected $rule = [ //require是内置规则,而tp5并没有正整数的规则,所以下面这个positiveInt使用自定义的规则 'id' => 'require|positiveInt' ];
그럼 사용자 정의 규칙을 수행하는 방법은 실제로 간단합니다. 보호된 메서드를 정의하세요
//系统会自动传入几个参数 第一个是 要验证的值,第二个是规则,自己可以规定规则内容或者不写,第三个是最初传入的data。其实不只这三个参数,想了解详细的可以看看文档 protected function positiveInt($value, $rule='', $data) { if (is_int(($value+0))&&($value+0)>0) { return true; }else{ return 'id必须为正整数'; } }
3. 호출 확인
public function test($id) { //在控制器中直接调用写上这行代码就搞定验证了 (new IdMustBePositiveInt)->goCheck(); }
단 한 줄의 코드만으로 인증을 직접 수행할 수 있습니다. ID 유효성 검사기를 인스턴스화할 때 상위 클래스의 goCheck 메서드를 호출합니다.
goCheck 메소드는 매개변수를 허용하고 매개변수를 유효성 검사 객체
의 check 메소드에 전달하면 ID 유효성 검사기의 $rule 및 사용자 정의 규칙에 지정된 필수 규칙과 일치합니다.
这次只举了id为例子,虽然看上去比直接写独立验证麻烦很多,但是大家仔细想想,这个验证规则其实在很多地方都是一样的,比如密码验证规则,用户名验证规则等,当这个项目写完了。你已经完成了很多验证器。其实在下个项目中还可以继续套用的哦
TP5验证规则使用
①静态调用(使用内置的规则验证单个数据,返回值为布尔值)
// 日期格式验证 Validate::dateFormat('2016-03-09','Y-m-d'); // true // 验证是否有效的日期 Validate::is('2016-06-03','date'); // true // 验证是否有效邮箱地址 Validate::is('thinkphp@qq.com','email'); // true // 验证是否在某个范围 Validate::in('a',['a','b','c']); // true // 验证是否大于某个值 Validate::gt(10,8); // true // 正则验证 Validate::regex(100,'\d+'); // true
②模型验证(在模型中的验证方式)
$User = new User; $result = $User->validate( [ 'name' => 'require|max:25', 'email' => 'email', ], [ 'name.require' => '名称必须', 'name.max' => '名称最多不能超过25个字符', 'email' => '邮箱格式错误', ] )->save($data); if(false === $result){ // 验证失败 输出错误信息 dump($User->getError()); }
③控制器验证(控制器中进行验证)
如果你需要在控制器中进行验证,并且继承了\think\Controller的话,可以调用控制器类提供的validate方法进行验证,如下:
$result = $this->validate( [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com', ], [ 'name' => 'require|max:25', 'email' => 'email', ]); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
控制器中的验证代码可以简化为:
$result = $this->validate($data,'User'); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
如果要使用场景,可以使用:
$result = $this->validate($data,'User.edit'); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
在validate方法中还支持做一些前置的操作回调,使用方式如下:
$result = $this->validate($data,'User.edit',[],[$this,'some']); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
好了,本次tp5验证器的介绍了就写到这里了,希望对大家的学习有所帮助。
相关推荐:
위 내용은 ThinkPHP5 유효성 검사기의 구체적인 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!