ThinkpHP 5 검증 기의 구체 적 인 사용

7373 단어 ThinkPHP5검증 기
선언:
저 희 는 API 개발 을 할 때 클 라 이언 트 가 보 내 온 인 자 를 받 아들 일 것 입 니 다.모두 가 이 인 자 는 믿 을 수 없다 는 것 을 알 고 있 습 니 다.저희 백 엔 드 개발 자 는 이 인 자 를 검증 해 야 합 니 다.저 는 예전 의 개발 에서 tp5 의 검증 기 만 알 고 그의 용 도 를 몰 랐 습 니 다.예전 의 개발 검증 은 모델 필드 를 바탕 으로 하 는 검증 이 었 기 때 문 입 니 다.검증 기 는 API 개발 에 더욱 적합 하 므 로 오늘 은 검증 기의 사용 에 대해 간단히 말씀 드 리 겠 습 니 다.
디 렉 터 리:
검증 기 만 들 기
단독 검증 기 작성
호출 검증
1.검증 기 만 들 기
우선 검증 기 를 저장 할 폴 더 가 필요 합 니 다.모듈 아래 컨트롤 러 와 같은 등급 의 폴 더 를 만 들 고 vaidate 라 고 이름 을 지 었 습 니 다.

그리고 우 리 는 검증 기 를 만 들 수 있 습 니 다.우 리 는 하나의 클래스 를 만 들 고 tp5 의 vaidate 류 를 계승 하면 됩 니 다.
그러나 대상 을 대상 으로 하 는 생각 을 잘 아 는 친 구 는 우리 가 하나의 방법 이 필요 하 다 는 것 을 알 아야 한다.모든 검증 기 를 사용 해 야 하지만 tp5 의 소스 코드 를 수정 하지 않 을 때.우 리 는 하나의 종 류 를 더 써 서 우리 의 기류 로 삼 는 다.모든 검증 기 는 이 기본 클래스 를 계승 한 다음 에 이 기본 클래스 는 tp5 의 vaidate 류 를 계승 합 니 다.
여기 저희 가 베이스 Validate 라 고 이름 을 지 었 어 요.

그럼 이제 제대로 된 검증 기 를 만 들 겠 습 니 다.예 를 들 어:

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
  protected $rule = [
    'name' => 'require|max:25',
    'email' => 'email',
  ];

}

컨트롤 러 나 모델 에 가서 예화 하고 호출 합 니 다.

//      ,               
$data = [
  'name'=>'thinkphp',
  'email'=>'[email protected]'
];

$validate = Loader::validate('User');

if(!$validate->check($data)){
  dump($validate->getError());
}

이런 검증 기의 응용 은 다 썼 다.간소화 할 만 한 점 이 있 는 지 살 펴 보 자.
4.567917.먼저 검 증 된 데 이 터 는 우리 가 클 라 이언 트 에 게 서 받 은 것 이다.그러면 첫 번 째 단 계 는 데 이 터 를 받 아들 이 는 것 이다4.567917.그 다음 에 우 리 는 데 이 터 를 검증 해 야 한다.만약 에 검증 이 통과 되 지 않 으 면 잘못된 정 보 를 되 돌려 야 한다이 두 부 는 인터페이스 가 요청 될 때마다 해 야 한다.그럼 이 걸 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);
    }
  }
}
이 go Check 방법 이 봉 인 된 후에 이 검증 규칙 이 어디 에 있 느 냐 고 물 을 수도 있 습 니 다.
2.단독 검증 기 작성
전에 BaseValidate 가 계승 되 는 데 쓰 인 다 고 말 한 적 이 있 습 니 다.그러면 진정한 검증 기 는 아직 쓰기 시작 하지 않 았 습 니 다.규칙 은 이 검증 기 에 제정 된다.좀 더 깊이 이해 하기 위해 서 는 사용자 정의 검증 규칙 도 사용 했다.사실 tp 가 써 놓 은 검증 규칙 은 충분 할 것 같 아 요.
우 리 는 가장 자주 받 아들 이 는 데 이 터 를 예 로 들 자.그것 이 바로 id 와 같은 이 id 는 우리 데이터베이스 에 있 는 특정한 데이터 의 id 를 대표 하 는 것 이다.이 id 는 우 리 는 기호 없 이 자동 으로 증가 하 는 메 인 키 로 디자인 되 고 성인 어 를 번역 하면 정수 이다.그러면 고객 이 보 내 온 매개 변수 가 음수 나 소수 라면 검증 을 통과 해 서 는 안 된다.
우 리 는 상술 한 수요 에 따라 검증 기 를 만 들 것 이다.위 치 는 여전히 이전 과 같 습 니 다.vaidate 폴 더 아래 에 있 습 니 다.

IdMustBePositive Int.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      ';
    }
  }
!!메모:여기 서 실 패 를 판단 하면 false 가 아 닌 오류 메 시 지 를 되 돌려 줍 니 다.
3.호출 검증
우리 가 이전에 포장 한 것 에 따 르 면 우리 가 달성 해 야 할 효 과 는 바로 파 라 메 터 를 받 아들 이 고 파 라 메 터 를 하나 로 검증 하 는 것 이다.그럼 이제 검증 을 어떻게 호출 할 까요?
대단 하 다

 public function test($id)
  {
    //                     
    (new IdMustBePositiveInt)->goCheck();
  }
4.567917.이런 코드 한 마디 로 검증 을 직접 해결 합 니 다.우리 가 id 검증 기 를 예화 할 때,그것 의 부모 클래스 의 go Check 방법 을 호출 합 니 다
  • goCheck 방법 은 인 자 를 받 아들 이 고 인 자 를 vaidate 대상 에 check 방법 으로 전달 합 니 다
  • 4.567917.id 검증 기 에서$rule 에 규정된 require 규칙 과 사용자 정의 규칙 에 일치 합 니 다다 통과 하면 트 루 로 돌아 갑 니 다4.567917.그 중 하나 가 일치 하지 않 으 면 이상 을 던 집 니 다이번 에는 id 만 예 로 들 었 습 니 다.독립 인증 을 직접 쓰 는 것 보다 훨씬 번 거 로 워 보이 지만 곰 곰 이 생각해 보 세 요.이 인증 규칙 은 여러 곳 에서 똑 같 습 니 다.예 를 들 어 암호 검증 규칙,사용자 이름 검증 규칙 등 이 있 습 니 다.이 항목 을 다 썼 을 때.너 는 이미 많은 검증 기 를 완성 했다.사실 다음 프로젝트 에 서 는 계속 쓸 수 있어 요.
    TP5 인증 규칙 사용
    ① 정적 호출(내 장 된 규칙 으로 단일 데 이 터 를 검증 하고 반환 값 은 불 값)
    
    //       
    Validate::dateFormat('2016-03-09','Y-m-d'); // true
    //          
    Validate::is('2016-06-03','date'); // true
    //           
    Validate::is('[email protected]','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 를 계승 해 야 한다 면 컨트롤 러 류 가 제공 하 는 vaidate 방법 으로 검증 할 수 있 습 니 다.다음 과 같 습 니 다.
    
    $result = $this->validate(
      [
        'name' => 'thinkphp',
        'email' => '[email protected]',
      ],
      [
        '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);
    }
    
    vaidate 방법 에 서 는 사전 조작 리 셋 도 지원 합 니 다.사용 방식 은 다음 과 같 습 니 다.
    
    $result = $this->validate($data,'User.edit',[],[$this,'some']);
    if(true !== $result){
      //            
      dump($result);
    }
    
    자,이번 tp5 검증 기의 소 개 는 여기까지 입 니 다.여러분 의 학습 에 도움 이 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기