이 패키지를 사용하면 PHP 코드에서 간단하게 선언 된 스키마를 통해 깨끗하고 독립적 인 DTO 클래스 ( "값 객체"라고도 함)를 생성 할 수 있습니다.
생성 된 클래스는이 라이브러리의 코드에서 아무것도 사용하지 않기 때문에 개발 환경에서만이 패키지 만 필요합니다. 그렇기 때문에 선호하는 방법은 IT를 require-dev 으로 포함시키는 것입니다.
$ composer require --dev klkvsk/dto-generator
스키마는 프로젝트의 어느 곳에서나 일반 PHP 파일입니다. 파일은 Schema 객체를 최상위 레벨에서 반환해야합니다.
스키마 예제 :
<?php
use Klkvsk DtoGenerator Schema as dto ;
use Klkvsk DtoGenerator Schema Types as t ;
return dto schema (
namespace: ' MyProjectData ' ,
objects: [
new dto object (
name: ' Person ' ,
fields: [
dto field ( ' name ' , t string (), required: true ),
dto field ( ' age ' , t int (), required: true ),
]
),
]
); 코드 생성은 dto-gen 명령으로 수행됩니다.
$ ./vendor/bin/dto-gen [schema-file]
기본적으로 생성기는 dto.schema.php 로 명명되거나 끝나는 파일을 검색하지만 스키마 파일을 수동으로 인수로 제공 할 수 있습니다.
Generator는 Composer.json의 자동로드 경로를 보면 출력에 대한 올바른 경로를 추측하려고합니다. "MyProject\": "src/" 에 대한 PSR-4 매핑을 표시하면 위의 파일은 src/Data/Person.php 에 배치됩니다.
이 동작을 무시하려면 outputDir 직접 지정할 수 있습니다.
dto schema (namespace: " MyProject \ Data " , outputDir: " src/generated/ " , ...);PHP의 최소 버전을 타겟팅하는 코드를 생성하려면 다음을 사용합니다.
./vendor/bin/dto-gen --target 7.4
이 옵션은 결과 코드의 새로운 언어 기능을 활성화하거나 비활성화합니다.
DTO뿐만 아니라 관련 열거를 생성 할 수 있습니다.
dto schema(
objects: [
dto enum (
name: ' PostStatus '
cases: [ ' draft ' , ' published ' , ' deleted ' ]
),
dto object(
name: ' Post ' ,
fields: [
dto field ( ' status ' , t enum ( ' PostStatus ' ), required: true ),
. . .
]
)
]
)PHP> = 8.0의 경우 기본 열거가 생성됩니다. 이전 버전의 경우 매우 유사한 클래스 기반 구현이 사용됩니다.
DTO는 데이터를 강력하게 입력 할 목적으로 사용됩니다. 스키마 유형은 다음과 같습니다.
tint , tbool , tstring , tfloat 기본 스칼라 유형tenum , tobject - 다른 dto 객체를 참조 할 수 있습니다tdate - dateTimeImutable 사용texternal - 다른 비 DTO 클래스를 참조하기위한tlist_(T) - t 형을 감싸서 t []tmixed - 당신이 정말로 모른다면 (여기서 t KlkvskDtoGeneratorSchemaTypes 에 대한 별칭입니다)
또한 필요에 따라 추상 Type 클래스를 확장 할 수 있습니다.
DTOS는 일반 생성자 또는 <DTO>::create(array $data) 메소드로 만들 수 있습니다.
메소드 create 데이터와의 연관 배열을 수락합니다. 그런 다음 해당 데이터를 필터링하고 (사전에 청소가 필요한 경우) 가져 와서 가져옵니다 (적절한 유형으로 변환). 그 후,이 메소드는 기본 생성자를 호출하여 가져온 필드를 전달합니다. 생성자는 유형뿐만 아니라 사용자 정의 논리로 유효성을 검증 합니다.
따라서 데이터 조작의 세 단계가 있으며 각각은 Callables가있는 스키마에서 설명 할 수 있습니다.
filter 데이터를 가져올 준비를 준비합니다importer 값을 올바른 유형으로 캐스트하거나 중첩 된 개체를 인스턴스화합니다.validator 검사 filter 및 importer 폐쇄는 처리 된 값을 반환해야합니다. null 반환되면 추가 폐쇄가 호출되지 않습니다.
validator true/false를 반환하고 false에서 InvalidArgumentException 이 자동으로 던져집니다. 또한 자신의 예외를 던지고 아무것도 반환하지 않을 수 있습니다.
유형 filter 및 validator 의 클로저는 스키마에서 정의됩니다.
dtofield('age', tint(),
filters: [ fn ($x) => preg_replace('/[^0-9]+/', $x) ],
validators: [ fn ($x) => $x > 0 && $x < 100 ]
)
tobject 제외한 모든 유형에 대해 유형 importer 의 폐쇄가 사전 정의되어 있습니다.
dtofield('file', texternal(SplFileInfo::class, fn ($x) => new SplFileInfo($x))
자신의 요구에 맞게 Type 확장하면 사용자 정의 수입업자를 지정할 수 있습니다.
예제 스키마 및 다른 PHP 버전에 대한 클래스를 생성 한 / 예제 / DIR을 참조하십시오.
MIT 라이센스 (MIT). 자세한 내용은 라이센스 파일을 참조하십시오.