SOAPClient UX를 완화하기 위해 PackageGenerator Project에서 생성 된 클래스에서 사용하는 클래스.
목표는 PackageGenerator Project에서 생성 한 클래스 위에있는 일반적이고 유용한 클래스를 제공하는 것입니다.
예를 들어, SOAP 결과 객체 특성의 배열 요소를 쉽게 반복 할 수 있으며 SOAP 요청을 위해 HTTP 및 SOAP 헤더를 쉽게 설정할 수 있으며 배열 상태 표현에서 객체를 쉽게 채울 수 있습니다.
정의 된 인터페이스는 PackageGenerator 생성 클래스의 요구 사항과 일치하려면 사용해야합니다.
이 인터페이스는 새로운 열거적인 클래스를 정의하는 데 사용해야합니다.
구현 해야하는 최소한 하나의 방법이 있으므로 목표를 보지 못하더라도 구현하는 것이 매우 빠릅니다.
$value 이 유효한지 확인해야합니다. 이것은 생성 된 열거 클래스에 항상 존재하는 getValidValues 메소드에 의해 리턴 된 문자열 배열을 사용하여 수행 할 수 있습니다.이 방법을 구현하지 않으려면 AbstractStructenumbase 클래스에서 상속되는 자신의 클래스를 만들 수 있습니다.
이 인터페이스는 새로운 structtype 클래스를 정의하는 데 사용해야합니다.
구현 해야하는 최소한 하나의 방법이 있으므로 목표를 보지 못하더라도 구현하는 것이 매우 빠릅니다.
이 방법을 구현하지 않으려면 AbstractStructBase 클래스에서 상속되는 자신의 클래스를 만들 수 있습니다.
이 인터페이스는 새로운 배열 클래스를 정의하는 데 사용해야합니다. 목표는 컨텐츠의 처리를 용이하게하기 위해 WSDL에 의해 정의 된 배열 스트러크 주변의 유틸리티 방법을 제공하는 것입니다. 따라서이 인터페이스는 구조체 인터페이스와 기본 ArrayAccess, Iterator 및 Countable PHP 인터페이스에서 상속됩니다.
구현 해야하는 유일한 방법은 getAttributeName 이지만 모든 생성 된 ArrayType 클래스에서 구현되므로 정의 할 필요가 없습니다. 배열 유형 클래스에서 사용할 수있는 것을 상기시켜줍니다.
따라서 기본적 으로이 인터페이스가 상속되는 PHP 인터페이스에 의해 선언 된 메소드를 적어도 무시해야합니다.
모든 메소드를 구현하지 않으려면 AbstractStructArraybase 클래스에서 상속되는 자신의 클래스를 만들 수 있습니다.
이 인터페이스는 PackageGenerator에서 생성 된 모든 ServiceType 클래스에 대한 새로운 SOAPCLIENT 기본 클래스를 정의하는 데 사용해야합니다.
다음은이 인터페이스와 해당 유틸리티에 의해 정의 된 상수/옵션입니다.
location 와 함께 비 WSDL 모드에 필요)true 입니다WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY 또는 WSDL_CACHE_BOTH 중 하나입니다.SOAP_1_1 또는 SOAP_1_2 중 하나입니다. 생략하면 비누 1.1이 사용됩니다SOAP_SINGLE_ELEMENT_ARRAYS 의 비트 마스크, SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (default) 또는 SOAP_AUTHENTICATION_DIGEST 일 수 있습니다.SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 또는 SOAP_SSL_METHOD_SSLv23 구현 해야하는 방법과 이유는 다음과 같습니다.
이러한 모든 방법을 구현하지 않으려면 AbstractSoapClientBase 클래스에서 상속되는 자신의 클래스를 만들 수 있습니다.
이 클래스는 PackageGenerator에서 생성 된 모든 EnumType 클래스의 기본 클래스입니다. 그것은 우리의 structenuminterface 인터페이스를 구현합니다. 두 가지 방법을 정의합니다.
getValidValues 메소드에 의해 리턴 된 현재 열거적 인 클래스 상수를 기반으로 해야하는 값을 검증하기 위해 기본 동작을 정의합니다. 이 클래스는 PackageGenerator에서 생성 된 모든 StructType 클래스의 기본 클래스입니다. 그것은 우리의 structinterface 인터페이스를 구현합니다. 5 가지 방법을 정의합니다.
var_export 사용하여 저장된 개체의 문자열 표현을로드 할 때 유용합니다. 또한 __construct 메소드를 사용하여 주입하기 어려운 많은 속성을 포함하는 물체의 주입을 용이하게 할 수 있습니다. __set_state 수화 방법으로 볼 수 있습니다.__set 이지만 __set_state 메소드에서 사용합니다. 또한 SOAPClient의 클래스 맵 옵션에 의해 중고 클래스에서 __set 메소드를 정의하면 수신 된 객체의 올바른 수화가 나빠집니다.__get . AbstractStructArraybase 클래스에서 사용합니다. $ item = Api StructType Item:: __set_state ([
' id ' => 1 ,
' name ' => ' Entity #1 ' ,
' label ' => ' Entity #1 ' ,
' _href ' => ' http://www.entity.com ' ,
]);
// $item is now an ApiStructTypeItem object 이 클래스는 PackageGenerator에서 생성 된 모든 ArrayType 클래스의 기본 클래스입니다. structarrayinterface 인터페이스를 구현합니다.
다음과 같은 항목 배열 인 요소가있는 즉시
$ items = Api ArrayType Items:: __set_state ([
' items ' => [
Api StructType Item:: __set_state ([
' id ' => 1 ,
' name ' => ' Entity #1 ' ,
' label ' => ' Entity #1 ' ,
' _href ' => ' http://www.entity-1.com ' ,
]),
Api StructType Item:: __set_state ([
' id ' => 2 ,
' name ' => ' Entity #2 ' ,
' label ' => ' Entity #2 ' ,
' _href ' => ' http://www.entity-2.com ' ,
]),
Api StructType Item:: __set_state ([
' id ' => 3 ,
' name ' => ' Entity #3 ' ,
' label ' => ' Entity #3 ' ,
' _href ' => ' http://www.entity-3.com ' ,
]),
],
]);
// 'items' is the unique property of the object
// Its name is returned by the getAttributeName method
// defined in the generated ApiArrayTypeItems classcount , length 방법 : 객체에 포함 된 항목 수를 제공합니다. foreach ( $ items as $ item ) {
// $items->current() and $item is an ApiStructTypeItem object
// $items->key() is the current index
} $ items -> first (); $ items -> last (); $ items -> item ( $ index ); $ items -> add ( Api StructType Item:: __set_state ([
' id ' => 4 ,
' name ' => ' Entity #4 ' ,
' label ' => ' Entity #4 ' ,
' _href ' => ' http://www.entity-4.com ' ,
])); 이 클래스는 PackageGenerator에서 생성 한 모든 ServiceType 클래스의 기본 클래스입니다. 목표는 SoapClientinterface 인터페이스를 구현하여 유틸리티/소수의 방법을 제공하는 것입니다. 클래스에 메소드에 메소드를 적용 할 수 있도록 비누 클리어 객체를 정적 특성으로 사용하기 때문에 기본적으로 데코레이터 디자인 패턴입니다. 여러 통화 사이에 싱글 톤을 갖기 위해 정적 속성입니다 (쿠키를 통화간에 자동으로 보낼 수 있음). True를 두 번째 매개 변수로 전달하여 재설정 할 수 있습니다.
이러한 유형의 ServiceType 클래스가 있다고 가정 해 봅시다.
namespace Api ServiceType ;
use WsdlToPhp PackageBase AbstractSoapClientBase ;
class ApiUpdate extends AbstractSoapClientBase
{
public function UpdateBulkOrder ( Api StructType ApiUpdateBulkOrder $ parameters )
{
try {
$ this -> setResult ( $ this -> getSoapClient ()-> UpdateBulkOrder ( $ parameters ));
return $ this -> getResult ();
} catch ( SoapFault $ soapFault ) {
$ this -> saveLastError ( __METHOD__ , $ soapFault );
return false ;
}
}
}할 수 있습니다 :
use WsdlToPhp PackageBase AbstractSoapClientBase ;
$ options = [
AbstractSoapClientBase:: WSDL_URL => ' __WSDL_URL__ ' ,
AbstractSoapClientBase:: WSDL_CLASSMAP => Api ApiClassMap:: classMap (),
];
// sets the first instance of SoapClient within AbstractSoapClientBase
$ update = new Api ServiceType ApiUpdate ( $ options );
// resets the SoapClient instance
$ update = new Api ServiceType ApiUpdate ( $ options , true );그런 다음이 기본 방법을 호출하십시오.
DOMDocument 버전을 반환합니다.DOMDocument 버전을 반환합니다.$this->saveLastError(__METHOD__, $soapFault) 호출 될 때 오류가 자동으로 채워집니다.SoapFault 객체를 반환해야합니다 $ result = $ update -> UpdateBulkOrder ( new Api StructType ApiUpdateBulkOrder ())
if ( $ result !== false ) {
echo "n This is the result as an object: " . print_r ( $ update -> getResult (), true );
// Actually $result is the same data than $update->getResult()
} else {
echo "n This is the XML request: " . $ update -> getLastRequest ( false );
echo "n These are the request's headers: " . $ update -> getLastRequestHeaders ( false );
echo "n This is the XML response: " . $ update -> getLastResponse ( false );
echo "n These are the response's headers: " . $ update -> getLastResponseHeaders ( false );
echo "n These are the last errors: " . print_r ( $ update -> getLastError (), true );
echo "n This is the current error: " . print_r ( $ update -> getLastErrorForMethod ( ' ApiServiceTypeApiUpdate::UpdateBulkOrder ' ), true );
}다음과 같은 추가 방법이 있습니다.
// A sample of its usage in the generated ServiceType class
public function setSoapHeaderCSPCHD ( Api StructType ApiCSPCHD $ cSPCHD , $ nameSpace = ' http://tempuri.org ' , $ mustUnderstand = false , $ actor = null )
{
return $ this -> setSoapHeader ( $ nameSpace , ' CSPCHD ' , $ cSPCHD , $ mustUnderstand , $ actor );
}풀 요청을 자유롭게 요청하십시오. 우리는 그것들을 공부하고 언제 통합 될 수 있는지 알려 드리겠습니다.
다음 명령으로 단위 테스트를 실행할 수 있습니다.
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
PHPFARM의 Docker 이미지 덕분에 테스트는 CLI를 사용하여 모든 PHP 버전에서 로컬로 실행할 수 있습니다.
우선, 프로젝트의 루트 디렉토리에서 아래 명령 줄을 실행하여 Docker-Compose를 사용하여 할 수있는 컨테이너를 만들어야합니다.
$ docker-compose up -d --build 그런 다음 composer 명령 및 php cli 명령을 실행할 수있는 package_base 라는 컨테이너가 있습니다.
# install deps in container (using update ensure it does use the composer.lock file if there is any)
$ docker exec -it package_base php-7.4 /usr/bin/composer update
# run tests in container
$ docker exec -it package_base php-7.4 -dmemory_limit=-1 vendor/bin/phpunit질문이 있으시면 자유롭게 문제를 만들어보십시오.
MIT 라이센스 (MIT). 자세한 내용은 라이센스 파일을 참조하십시오.