조건에 따라 필드를 가져오고 유효성을 검사하고 메시지를 다른 컨테이너(오류, 경고, 정보 및 성공 포함)에 저장하는 PHP 라이브러리입니다.
이 라이브러리의 기본 이념은 간단합니다. 3개의 클래스, 간단한 종속성 및 PHP 7.1 이상에서 실행되므로 WordPress, Laravel, 핵심 PHP 프로젝트 등을 포함한 거의 모든 PHP 프로젝트에서 실행할 수 있습니다.
예
PHP를 사용한 튜토리얼 양식 및 표
기능성의 예시입니다. 일반적인 예는 코드 몇 줄에 불과하더라도 더 복잡합니다.
"id"라는 입력 값(가져오기)의 유효성을 검사한다고 가정하면 다음 작업을 수행할 수 있습니다.
use eftec ValidationOne ;
$ val = new ValidationOne ();
$ r = $ val -> def ( ' ERROR ' )
-> type ( ' integer ' )
-> ifMissingThenDefault ()
-> condition ( " eq " , " It's not equals to 10 " , 10 )
-> condition ( " eq " , " It's not equals to 30 (info) " , 30 , ' info ' )
-> ifFailThenDefault ()
-> get ( ' id ' ); // <-- end of the chain
그런데 오류가 어디에 있습니까?. 메시지는 messageList 에 저장됩니다.
var_dump ( $ val -> messageList -> allArray ()); // here we show all messages of any kind of type.
var_dump ( $ val -> messageList -> errorCount ); // returns the number of errors.
var_dump ( $ val -> errorcount ()); // returns the number of errors (alternative)
var_dump ( $ val -> hasError ()); // returns true if there is an error.
그러나 유형(오류, 경고..)별로 메시지를 표시하고 특정 식별자별로 메시지만 표시할 수도 있습니다.
var_dump ( $ val -> messageList -> get ( ' id ' )-> allErrorOrWarning ()); // All error or warning contained in the key "id".
메시지가 일부 구조에 저장되는 이유는 무엇입니까? 단순히 오류를 반환하는 것이 쉽지 않은가요?
답변은 양식입니다. 세 개의 필드가 있는 양식이 있다고 가정해 보겠습니다. 그 중 하나가 실패하면 각 필드에 대해 오류가 별도로 표시되어야 합니다. 또한 전체 양식에는 고유한 메시지가 있을 수 있습니다.
체인의 시작은 일반적으로 코드 끝에 기록됩니다.
허용되는 방법은 다음과 같습니다.
예:
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> post ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> request ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> set ( ' 123 ' , ' id ' );
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['id']
$ val = new ValidationOne ( ' frm ' ); // we set a prefix for every reading.
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['frm_id']
조건($condition, $message = "", $conditionValue = null, $level = '오류', $key = null)
입력 유형 에 따라 달라지는 조건을 추가합니다.
@param 문자열 $조건
번호 :req,eq,ne,gt,lt,gte,lte,between,null,notnull
문자열 :req,eq,ne,minlen,maxlen,betweenlen,null,notnull,contain,notcontain,alpha,alphanum,text,regexp,email,url,domain
날짜 :req,eq,ne,gt,lt,gte,lte,between
날짜 문자열 :req,eq,ne,gt,lt,gte,lte,between
부울 :req,eq,ne,true,false
파일 : 최소 크기, 최대 크기, 요청, 이미지, 문서, 압축, 아키텍처, 확장
기능:
fn.static.Class.methodstatic
fn.global.function
fn.object.Class.method 여기서 object는 전역 $object입니다.
fn.class.Class.방법
fn.class.namespaceClass.method
@param 문자열 $메시지
메시지는 다음 변수 '%field','%realfield','%value','%comp','%first','%second'를 사용할 수 있습니다.
필드 | 설명 | 예 |
---|---|---|
%필드 | 필드 이름은 친구 ID 일 수도 있고 실제 이름일 수도 있습니다. | 고객ID |
%리얼필드 | 필드 이름( friendid 아님) | 고객 식별자 |
%값 | 필드의 현재 값 | 남자 |
%comp | 비교할 값(있는 경우) | |
%첫 번째 | 비교할 첫 번째 값(비교 값이 배열인 경우) | |
%두번째 | 비교할 두 번째 값(비교 값이 배열인 경우) | |
%열쇠 | 사용된 키(입력 배열용) |
@param null $conditionValue
@param string $level (오류, 경고, 정보, 성공). 오류 수준입니다. 자세한 내용은 MessageContainer를 참조하세요.
@param string $key 키가 null이 아닌 경우 키별로 둘 이상의 조건을 추가하는 데 사용됩니다.
@return ValidationOne
참고: 값이 null이고 isNullValid()가 true인 경우 조건이 무시됩니다. 값이 누락되고 isMissingValid()가 true인 경우 조건이 무시됩니다. 값이 비어 있고('') isEmptyValid()가 true이면 조건이 무시됩니다. 값이 비어 있거나('') null이고 isNullOrEmptyValid()가 true이면 조건이 무시됩니다. isNullValid(),isMissingValid(),isNullOrEmptyValid() 및 isEmptyValid()는 값이 존재하거나 값이 설정된 경우에만 값의 유효성을 검사하려는 경우에 유용합니다.
예:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> set ( ' aaa ' , ' variable2 ' );
유형 | 설명 |
---|---|
정수 | (숫자) 소수점 없는 숫자를 허용합니다. |
유닉스타임 | (숫자) 소수점 없는 숫자를 허용합니다. |
부울 | (부울) true 또는 false를 저장합니다. 입력은 다양할 수 있습니다(비어 있음, 0 또는 null = false, 그렇지 않으면 true). |
소수 | (숫자) 소수점 이하의 숫자를 허용합니다. |
뜨다 | (숫자) 소수점 이하의 숫자를 허용합니다. |
varchar | (문자열) 모든 입력이 허용됩니다. |
끈 | (문자열) 모든 입력이 허용됩니다. |
날짜 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 DateTime 객체로 저장됩니다. |
날짜시간 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 DateTime 객체로 저장됩니다. |
날짜 문자열 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 문자열로 저장됩니다. |
날짜/시간문자열 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 문자열로 저장됩니다. |
파일 | (파일) 입력은 문자열이고 문자열로 저장되지만 특별한 유효성 검사를 추가합니다. |
입력 유형 | 상태 | |
---|---|---|
숫자 | gt,lt,gte,lte,사이 | |
끈 | minlen,maxlen,betweenlen,포함 ,포함하지 않음,알파,영숫자,텍스트,정규 표현식,이메일,URL,도메인 | |
날짜 | gt,lt,gte,lte,사이 | |
날짜 문자열 | gt,lt,gte,lte,사이 | |
부울 | 참, 거짓 | |
파일 | 최소 크기, 최대 크기, 요청, 이미지, 문서, 압축, 아키텍처, 확장 | |
* (모든 유형에 적용됩니다) | req,eq,ne,null,notnull,비어 있음,비어 있지 않음 | |
* | 기능 | |
* | fn.static.Class.methodstatic | |
* | fn.global.function | |
* | fn.object.Class.method 여기서 object는 전역 $object입니다. | |
* | fn.class.Class.방법 | |
* | fn.class.namespaceClass.method |
상태 | 설명 | 값의 예 |
---|---|---|
건축학 | 파일 확장자는 건축 파일(dwg 등)이어야 합니다. | |
~ 사이 | 숫자는 두 값 사이에 있어야 합니다. | [0,20] |
사이에 | 텍스트 길이는 두 값 사이에 있어야 합니다. | [0,20] |
압축 | 파일 확장자는 압축 파일이어야 합니다. | |
포함하다 | 텍스트에는 값이 포함되어야 합니다. | "텍스트" |
의사 | 파일 확장자는 문서 파일이어야 합니다. | |
eq (배열이나 값일 수 있음) / == | 값은 다음과 같아야 합니다. 값은 배열에 포함되어야 합니다. | "텍스트",["텍스트","텍스트2"] |
존재하다 | 파일 또는 값이 존재해야 합니다(null이거나 비어 있을 수 있음). | |
누락/존재하지 않음 | 파일 또는 값이 존재하지 않거나 null이거나 비어 있어야 합니다. | |
필수 (또는 필수) | 값은 null이거나 비어 있을 수 없습니다. | |
내선 | 확장자(파일)이 확장자 목록에 있어야 합니다. | ["ext1","ext2","ext3"] |
거짓 | 값은 false여야 합니다(===false). | |
fn.class.namespaceClass.method | 클래스의 메서드는 true를 반환해야 합니다. | |
fn.class.Class.방법 | 클래스의 메서드는 true를 반환해야 합니다. | |
fn.global.function | 전역 함수는 true를 반환해야 합니다. | |
fn.object.Class.method 여기서 object는 전역 $object입니다. | 전역 개체의 메서드는 true를 반환해야 합니다. | |
fn.static.Class.methodstatic | 클래스의 정적 메서드는 true를 반환해야 합니다. | |
기능 | 함수는 true를 반환해야 합니다. | |
GT / > | 값은 다음보다 커야 합니다. | 123 |
gte / >= | 값은 다음보다 크거나 같아야 합니다. | 123 |
영상 | 파일 확장자는 이미지 파일이어야 합니다. | |
lt / < | 값은 다음보다 작아야 합니다. | 123 |
LTE / <= | 값은 다음보다 작거나 같아야 합니다. | 123 |
맥렌 | 문자열의 최대 길이 | 123 |
최대 크기 | 파일의 최대 크기 | 123 |
민렌 | 문자열의 최소 길이 | 123 |
최소 크기 | 파일의 최소 크기 | 123 |
mime(비교할 값은 문자열 또는 배열일 수 있음) | 파일의 MIME 유형 | "application/msword" 또는 ["application/msword","image/gif"] |
마임타입 | 파일의 MIME 유형(하위 유형 없음) | "응용 프로그램" 또는 ["응용 프로그램,"이미지"] |
ne / != (비교할 값은 단일 값 또는 배열일 수 있음) | 값은 동일할 수 없습니다. 또는 값이 배열에 포함되어서는 안 됩니다. | 123,[123,345],["aa","bb"] |
포함하지 않음 | 값에는 값이 포함되어서는 안 됩니다. | "텍스트" |
널이 아니다 | 값은 null이 아니어야 합니다. | |
null | 값은 null이어야 합니다. | |
비어 있는 | 값은 비어 있어야 합니다(예: "",0,null). | |
비어 있는 | 값은 비어 있으면 안 됩니다(예: "",0,null과 같지 않음). | |
요구 | 값이 존재해야 합니다. | |
진실 | 값은 true여야 합니다(===true). |
예:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' between ' , ' %field %value must be between 1 and 50 ' ,[ 1 , 50 ])
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' ,[ 60 , 200 ]) // eq allows a single or array
-> condition ( ' fn.static.Example.customval ' , ' the function does not work ' )
-> condition ( ' req ' )
-> condition ( ' lt ' , " es muy grande " , 2000 , ' warning ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' fn.static.Example.fnstatic ' , ' the static function does not work ' )
-> condition ( ' fn.static.somespaceSomeclass.methodStatic ' , null )
-> condition ( ' fn.global.customval ' , ' The global function does not work ' )
-> condition ( ' fn.object.example.fnnostatic ' , ' the function object does not work ' )
-> condition ( ' fn.class.somespaceSomeclass.method ' , ' The function some class does not work ' )
-> condition ( ' fn.class.Example.fnnostatic ' , ' la funcion class no funciona ' );
// ->condition('fn.static.Example.customval','la funcion no funciona')
function customval ( $ value , $ compareValue ) {
return true ;
}
때로는 사용자 정의 조건을 사용해야 할 때도 있습니다. 전역 변수, 정적 함수 또는 클래스 내부의 메서드를 만들 수 있습니다.
생성된 모든 메소드나 함수에는 두 개의 매개변수(임의의 이름 포함)가 있어야 합니다.
예를 들어, 일부 ID가 데이터베이스에 존재하지 않는지 평가해야 하는 경우 어떻게 해야 합니까?
$ validation -> condition ( ' fn.global.idExist ' , ' The id already exist! ' )-> get ( " id " );
function idExist ( $ id , $ compare = null ) {
// select count(*) c from table where id=$id
if ( $ c > 0 ) {
return true ;
} else {
return false ;
}
}
참고: 네임스페이스를 지정해야 하는 경우 namespaceSomeClass 표기법을 사용할 수 있습니다.
$ validation -> condition ( ' fn.global.customfn ' ); // global
$ validation -> condition ( ' fn.static.SomeClass.staticfn ' ); // calling a static method inside the class SomeClass.
$ validation -> condition ( ' fn.class.SomeClass.noStaticFn ' ); // method inside a class,it creates an instance of an object then it calls the method
$ validation -> condition ( ' fn.object.myObject.noStaticFn ' ); // method inside a class, it uses an instance called $myObject
// global function
function customfn ( $ value , $ compareValue ) {
// returns true or false
}
// static function
$ myObject = new SomeClass ();
class SomeClass {
public static function staticfn ( $ value , $ compareValue ) {
// returns true or false
}
public function noStaticFn ( $ value , $ compareValue ) {
// returns true or false
}
}
객체의 유효성을 검사할 때 객체는 메시지 컨테이너(메시지 목록이라고도 함) 내부에 정보를 저장할 수 있습니다.
MessageContainer (EFTEC/MessageContainer)에는 계층 구조 방식으로 목록 메시지가 포함되어 있습니다.
Container (usually only 1 for all the project)
Lockers (from zero to many)
Messages (from zero to many and grouped by level)
$ container -> get ( ' locker20 ' )-> firstError (); // it returns the first message of error in the locker20 that is part of the container.
메시지는 다음과 같이 평준화됩니다.
ID | 설명 | 예 |
---|---|---|
오류 | 메시지는 오류이므로 해결해야 합니다. 우리의 쇼 스토퍼입니다. | 데이터베이스가 다운되었습니다 |
경고 | 이 메시지는 무시할 수도 있다는 경고입니다. 그러나 MessageContainer 클래스를 사용하면 오류와 경고를 동일하게 그룹화할 수 있습니다. | 레지스트리가 저장되었지만 경고가 표시되었습니다. |
정보 | 메시지는 정보입니다. 예를 들어 작업을 기록하거나 디버깅합니다. | 로그가 저장됩니다 |
성공 | 메시지는 성공적인 작업입니다. | 주문 수락됨 |
기능 | 설명 | 예 |
---|---|---|
addMessage($idLocker, $message, $level = '오류') | 사물함 내부에 메시지를 추가합니다. 일반적으로 이는 라이브러리에 의해 자동으로 수행되지만 코드를 통해 수동으로 메시지를 추가할 수도 있습니다. | $this->addMessage('pwd','비밀번호가 필요합니다.','error'); |
getMessage($withWarning = 거짓) | 첫 번째 오류 메시지가 표시되거나 오류 메시지가 없으면 비어 있습니다. | $this->getMessage(); |
getMessages($withWarning = false) | 모든 오류 메시지가 표시되거나 오류 메시지가 없으면 비어 있습니다. | $this->getMessages(); |
getMessageId($idLocker) | MessageLocker 개체를 가져옵니다(자세한 내용은 EFTEC/MessageContainer 참조). | $obj=$this->getMessageId('pwd'); |
errorCount(includeWarning=false) | 오류 개수를 가져옵니다. | $count=$this->errorCount(); |
hasError($includeWarning=false) | 오류가 있으면 true를 반환합니다. | $fail=$this->hasError(); |
필드 | 설명 | 예 |
---|---|---|
$messageList | 모든 컨테이너를 가져옵니다. MessageContainer 유형의 객체를 반환합니다. | $container=$this->messageList; |
EFTEC/MessageContainer에서 MessageContainer 에 대한 자세한 정보를 볼 수 있습니다.
예:
$ validation -> addMessage ( ' idlocker ' , ' this field is required ' , ' error ' ); // it adds a message inside a locker.
$ validation -> messageList -> get ( ' idlocker ' )-> allError (); // it gets all errors from the locker idlocker
$ validation -> getMessages ( true ); // it gets all messages of error or warning from all the lockers.
날짜를 가지고 작업할 수도 있습니다. 날짜 형식에는 여러 가지 유형이 있습니다.
유형 | 설명 |
---|---|
날짜 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 DateTime 객체로 저장됩니다. |
날짜시간 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 DateTime 객체로 저장됩니다. |
날짜 문자열 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 $dateOutputString 필드를 사용하여 문자열로 저장됩니다. |
날짜/시간문자열 | (date) 입력은 DateTime 또는 문자열일 수 있습니다. 값은 $dateLongOutputString 필드를 사용하여 문자열로 저장됩니다. |
날짜 형식을 지정하는 방법에는 간략(날짜만)과 긴(날짜 및 시간)의 두 가지 방법이 있습니다. 그리고 형식을 입력 및 출력으로 지정할 수 있습니다.
이름 필드 | 설명 | 기본값 |
---|---|---|
$dateShort | 날짜(짧은)에 대한 (예상되는) 입력 형식입니다. | 일/월/년 |
$dateLong | (예상되는) 입력 형식입니다(날짜 및 시간 포함). | 일/분/YH:i:s |
$dateOutputString | 출력 형식입니다(날짜 문자열의 경우). | Ymd |
$dateLongOutputString | 출력 형식입니다(datetimestring의 경우). | YmdTH:i:sZ |
$ r = getVal ()-> type ( ' datestring ' )-> set ( ' 31-12-2019 ' ); // 2019-12-31 note: the default input value is d/m/Y, not m/d/Y
필드를 변경하거나 다음 함수를 호출하여 날짜 형식을 변경할 수 있습니다.
날짜 형식 설정(입력 짧게, 입력 길게, 출력 짧게, 출력 길게)
$ validation -> setDateFormat ( ' m/d/Y ' , ' m/d/Y H:i:s ' , ' Y-m-d ' , ' Y-m-dTH:i:sZ ' )
날짜 형식을 기본 구성으로 설정했습니다.
$ validation -> setDateFormatDefault ();
날짜 형식을 다음과 같이 설정했습니다.
이름 | 체재 |
---|---|
입력 단락 | 월/일/연 |
길게 입력하다 | m/d/YH:i:s |
출력 단락 | Ymd |
길게 출력하다 | YmdTH:i:sZ |
$ validation -> setDateFormatEnglish ()
기본적으로 이 라이브러리는 예외를 생성하지 않습니다. 그러나 메시지 유형이 ERROR 및/또는 WARNING인 경우 예외가 생성될 수 있습니다.
이 방법을 사용하면 컨테이너가 오류를 생성하면 저장되고 새로운 예외도 생성됩니다.
참고: 기본적으로 대부분의 메시지는 ERROR 유형입니다.
참고: 연산자가 발생하면 값이 할당되지 않고 스택이 삭제됩니다. 즉, 예외가 발생하면 모든 정보가 손실됩니다.
try {
$ validation -> type ( ' integer ' )
-> throwOnError () // for errors only
-> set ( ' hello ' , ' field1 ' );
// or you could use:
$ validation -> type ( ' integer ' )
-> throwOnError ( true , true ) // for errors and warnings
-> set ( ' hello ' , ' field1 ' );
$ this -> fail ( ' this value means the throw failed ' );
} catch ( Exception $ ex ) {
$ this -> assertEquals ( ' field1 is not numeric ' , $ ex -> getMessage ());
}
이 라이브러리에는 빈 값을 처리하는 네 가지 방법이 있습니다.
$ validation -> exist ()-> set ( null ); // is valid.
$ validation -> exist ()-> set ( '' ); // is valid.
$ validation -> exist ()-> get ( ' field ' ); // is valid only if $_GET['field'] exist (even if it is null)
$ validation -> required ()-> set ( null ); // is not valid.
$ validation -> required ()-> set ( "" ); // is not valid.
$ validation -> required ()-> set ( ' hi ' ); // is valid.
$ validation -> notnull ()-> set ( null ); // is not valid.
$ validation -> notnull ()-> set ( "" ); // is valid.
$ validation -> notnull ()-> set ( ' hi ' ); // is valid.
$ validation -> notempty ()-> set ( null ); // is valid.
$ validation -> notempty ()-> set ( "" ); // is not valid.
$ validation -> notempty ()-> set ( ' hi ' ); // is valid.
또한 모든 조건을 우회하여 누락된 값(null 또는 비어 있음)을 허용하는 4가지 방법이 있습니다.
$ validation -> isNullValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isNullorEmptyValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isEmptyValid ()-> condition (... . )-> set ( '' ); // is valid no matter the condition.
$ validation -> isMissingValid ()-> condition (... . )-> get ( ' field ' ); // If the field is missing, then is valid no matter the condition
값이 누락되었거나 비어 있거나 null이 아닌 이상 입력에 어떤 값이 있는지 확인해야 할 때 사용됩니다.
isNullorEmptyValid()는 호출하는 것과 같습니다: isEmptyValid()->isNullValid()
또한 해당 연산자는 누적될 수 있습니다.
$ validation
-> isNullorEmptyValid ()
-> isMissingValid ()
-> condition (... . )
-> set (... . ); // this expression is valid if the value is null, empty(''), the value is missing, no matter the conditions.
기본값을 설정할 수 있습니다. 이 값은 오류가 있는 경우 대체될 수 있습니다. 기본값은 변환되거나 처리되지 않습니다.
$ validation
-> def (- 1 )
-> type ( ' integer ' )
-> ifFailThenDefault ()
-> set (...); // if the operation fails, then it returns -1
결과를 다듬습니다. 기본적으로 결과는 잘리지 않습니다. 왼쪽, 오른쪽 또는 양쪽을 다듬을 수 있습니다. 작업을 수행하기 위해 변환() 메소드를 사용합니다.
$ validation -> trim ()-> set (... . ); // trim both sided
$ validation -> trim ( ' trim ' , ' ., ' )-> set (... . ); // trim . and ,
$ validation -> trim ( ' ltrim ' )-> set (... . ); // trim left sided
$ validation -> trim ( ' rtrim ' )-> set (... . ); // trim right sided
때때로 우리는 항상 결과를 다듬고 싶을 때가 있습니다. 따라서 우리는 이 방법을 사용하여 항상 결과를 다듬을 수 있습니다. 변환이 끝나면 스택됩니다.