지루한 이름의 입력 유효성 검사 프레임 워크
changelog
입력 유효성 검사는 모든 웹 애플리케이션에서 중요한 작업이지만 여전히 지루한 작업으로 남아 있습니다. 이는 intermingled 검사를 필요하고 선택적인 입력을 명확하게 정의하는 적절한 데이터 구조로 대체합니다.
디자인은 각 API 엔드 포인트가 고유 한 객체 인 API 구동 디자인의 아이디어를 중심으로 이루어 지지만이 형식은 명시 적으로 필요하지 않습니다.
원시 입력은 두 가지 주요 단계에서 안전한 데이터로 변환됩니다.
구문 분석은 원시 입력 문자열을 연관 배열로 변환하는 데 도움이됩니다. 응용 프로그램이 그렇게하도록 구성된 경우이 단계를 완전히 건너 뛸 수 있습니다.
유효성 검사는 라이브러리에서 가장 유용한 부분입니다. 정의 된 선택 사항 및 필요한 매개 변수 및 해당 유형을 취하고 입력 값을 사양과 비교합니다. 구현은 유효하지 않은 데이터가 완전히 전파되는 것을 방지합니다. 유효하지 않은 데이터에서 SafeInput (응용 프로그램이 사용할)을 만들 수는 없습니다!
이 프로세스가 완료되면 객체를 구현 한 객체를 구현 한 사양에 따라 데이터를 포함하는 SafeInput 객체가 반환됩니다 (선택 ValidationInterface 값이 누락 된 것은 NULL).
이 라이브러리는 신뢰할 수있는 데이터를 제공하기 위해 존재하기 때문에 두 번째 추측을 적극적으로 방지합니다. 예를 들어, 데이터 구조에서 isset 또는 empty 있으면 예외가 발생합니다. 귀하의 검증 된 데이터를 신뢰할 수없는 행동은 패턴과 코드 냄새라는 것이 저자의 경험입니다. 당신이 그렇게한다고 주장한다면, 이것은 당신에게 적합한 도구가 아닙니다. 이와 같은 신뢰를 강요하는 것은 문서가 현실과는 별도로 드러나는 것을 막는 경향이 있습니다.
기본 예는 다음과 같습니다.
some_controller_file.php
<?php
// This would be in its own file
use Firehed Input Interfaces ValidationInterface ;
use Firehed Input Containers SafeInput ;
use Firehed Input Objects as O ;
class Endpoint
implements ValidationInterface {
public function getOptionalInputs () {
return [
' bar ' => new O Text (),
' baz ' => ( new O Text ())-> setDefaultValue ( ' my baz ' ),
];
}
public function getRequiredInputs () {
return [
' foo ' => new O Text (),
];
}
public function execute ( SafeInput $ i ) {
// ... do some magic
// $i['foo'] will be a string
// $i['bar'] will be a string or null, since it was optional
// $i['baz'] will be a string or 'my baz', since it was an optional with a default value
}
} index.php
<?php
// This is the core of your Front Controller
use Firehed Input Containers RawInput ;
use Firehed Input Parsers URLEncoded ;
// The endpoint should be detrmined by your router
$ endpoint = new Endpoint ();
// The parser should be determined by the Content-Type header
$ parser = new URLEncoded ();
try {
$ input = ( new RawInput ( " foo=world " ))
-> parse ( $ parser )
-> validate ( $ endpoint );
$ endpoint -> execute ( $ input );
} catch ( Firehed Input Exceptions InputException $ e ) {
// The input contained invalid data
} catch ( Exception $ e ) {
// Do any logging, error responses, etc.
echo $ e ;
}