คลาสที่ใช้โดยคลาสที่สร้างขึ้นโดย PackageGenerator Project เพื่อความสะดวกใน SoapClient UX
เป้าหมายคือการจัดให้มีคลาสทั่วไปและมีประโยชน์ที่อยู่ด้านบนของคลาสที่สร้างโดยโครงการ PackageGenerator
ตัวอย่างเช่นมันช่วยให้สามารถวนลูปผ่านองค์ประกอบอาร์เรย์ของคุณสมบัติวัตถุผลลัพธ์ SOAP ได้อย่างง่ายดายช่วยให้สามารถตั้งค่าส่วนหัว HTTP และ SOAP ได้อย่างง่ายดายสำหรับการร้องขอ SOAP และช่วยให้สามารถเติมวัตถุจากการแสดงสถานะอาร์เรย์ได้อย่างง่ายดาย
อินเทอร์เฟซที่กำหนดจะต้องใช้เพื่อให้สามารถจับคู่ข้อกำหนดสำหรับคลาส PackageGenerator ที่สร้างขึ้น
อินเทอร์เฟซนี้จะต้องใช้เพื่อกำหนดคลาส enumtype ใหม่
มีวิธีการอย่างน้อย/ส่วนใหญ่ที่ต้องใช้ดังนั้นจึงค่อนข้างเร็วที่จะนำไปใช้แม้ว่าคุณจะไม่เห็นเป้าหมายของมัน:
$value ที่ผ่านมานั้นถูกต้อง สิ่งนี้สามารถทำได้โดยใช้อาร์เรย์ของสตริงที่ส่งคืนโดยวิธี getValidValues ที่มีอยู่ในคลาส enum ที่สร้างขึ้นเสมอหากคุณไม่ต้องการใช้วิธีนี้คุณสามารถสร้างคลาสของคุณเองที่สืบทอดมาจากคลาส AbstractStructenumbase ของเรา
อินเทอร์เฟซนี้จะต้องใช้เพื่อกำหนดคลาส structtype ใหม่
มีวิธีการอย่างน้อย/ส่วนใหญ่ที่ต้องใช้ดังนั้นจึงค่อนข้างเร็วที่จะนำไปใช้แม้ว่าคุณจะไม่เห็นเป้าหมายของมัน:
หากคุณไม่ต้องการใช้วิธีนี้คุณสามารถสร้างคลาสของคุณเองที่สืบทอดมาจากคลาส AbstractStructBase ของเรา
อินเทอร์เฟซนี้จะต้องใช้เพื่อกำหนดคลาส ArrayType ใหม่ เป้าหมายคือการจัดหาวิธีการยูทิลิตี้รอบ ๆ โครงสร้างอาร์เรย์ที่กำหนดโดย WSDL เพื่อลดการจัดการเนื้อหา ดังนั้นอินเทอร์เฟซนี้สืบทอดมาจากอินเทอร์เฟซ structInterface ของเรารวมถึง ArrayAccess ดั้งเดิม, ตัววนซ้ำและอินเทอร์เฟซ PHP ที่นับได้
วิธีเดียวที่จะต้องดำเนินการคือ getAttributeName แต่โปรดทราบว่ามันถูกนำไปใช้ในทุกคลาส Arraytype ที่สร้างขึ้นดังนั้นไม่จำเป็นต้องกำหนด มันเป็นเพียงเครื่องเตือนใจถึงสิ่งที่มีอยู่ในคลาส ArrayType
ดังนั้นโดยทั่วไปคุณต้องแทนที่วิธีการที่ประกาศโดยอินเทอร์เฟซ PHP ซึ่งอินเทอร์เฟซนี้สืบทอดมา
หากคุณไม่ต้องการใช้วิธีการทั้งหมดคุณสามารถสร้างคลาสของคุณเองที่สืบทอดมาจากคลาส AbstractStructarrayBase ของเรา
อินเทอร์เฟซนี้จะต้องใช้เพื่อกำหนดคลาสฐาน SOAPClient ใหม่สำหรับคลาส ServiceType ใด ๆ ที่สร้างโดย PackageGenerator
นี่คือค่าคงที่/ตัวเลือกที่กำหนดโดยอินเทอร์เฟซนี้และยูทิลิตี้ของพวกเขา:
location )trueWSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY หรือ WSDL_CACHE_BOTHSOAP_1_1 หรือ SOAP_1_2 เพื่อเลือก SOAP 1.1 หรือ 1.2 ตามลำดับ หากละเว้นสบู่ 1.1 จะใช้SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (ค่าเริ่มต้น) หรือ SOAP_AUTHENTICATION_DIGESTSOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 หรือ SOAP_SSL_METHOD_SSLv23 นี่คือวิธีการที่ต้องใช้และทำไม:
หากคุณไม่ต้องการใช้วิธีการทั้งหมดเหล่านี้คุณสามารถสร้างคลาสของคุณเองที่สืบทอดมาจากคลาส AbstractsoapClientBase ของเรา
คลาสนี้เป็นคลาสพื้นฐานสำหรับคลาส EnumType ใด ๆ ที่สร้างโดย PackageGenerator มันใช้อินเทอร์เฟซ structenuminterface ของเรา มันกำหนดสองวิธี:
getValidValues คลาสนี้เป็นคลาสพื้นฐานสำหรับคลาส StructType ใด ๆ ที่สร้างโดย PackageGenerator มันใช้อินเทอร์เฟซ StructInterface ของเรา กำหนดห้าวิธี:
var_export นอกจากนี้ยังช่วยให้คุณสามารถลดการแทรกซึมของวัตถุที่มีคุณสมบัติมากมายซึ่งยากที่จะใช้วิธีการ __construct คุณสามารถเห็น __set_state เป็นวิธีการไฮดรา__set แต่ใช้โดยวิธี __set_state นอกจากนี้การกำหนดวิธี __set บนคลาสที่ใช้แล้วโดยตัวเลือก ClassMap สำหรับ SoapClient จะแบ่งการไฮดราที่ถูกต้องของวัตถุที่คุณได้รับ__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 คลาสนี้เป็นคลาสพื้นฐานสำหรับคลาส ArrayType ใด ๆ ที่สร้างโดย PackageGenerator มันใช้อินเทอร์เฟซ 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 ' ,
])); คลาสนี้เป็นคลาสพื้นฐานสำหรับคลาส ServiceType ใด ๆ ที่สร้างโดย PackageGenerator เป้าหมายคือการจัดหาวิธีการยูทิลิตี้/พกพาโดยใช้อินเทอร์เฟซ SoapClientInterface ของเรา มันเป็นรูปแบบการออกแบบมัณฑนากรเนื่องจากคลาสมีวัตถุสบู่เป็นคุณสมบัติคงที่เพื่อให้สามารถใช้วิธีการนี้ได้ มันเป็นคุณสมบัติคงที่เพื่อให้มีซิงเกิลระหว่างการโทรหลายครั้ง (อนุญาตให้ส่งคุกกี้โดยอัตโนมัติระหว่างการโทร) มันสามารถรีเซ็ตได้โดยการส่งผ่านจริงเป็นพารามิเตอร์ที่สอง
สมมติว่าคุณมีคลาส 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
ด้วยภาพ Docker ของ PHPFARM การทดสอบสามารถรันได้ในเครื่องภายใต้เวอร์ชัน PHP ใด ๆ โดยใช้ CLI:
ก่อนอื่นคุณต้องสร้างคอนเทนเนอร์ของคุณซึ่งคุณสามารถทำได้โดยใช้ Docker-compose โดยเรียกใช้บรรทัดคำสั่งด้านล่างจากไดเรกทอรีรูทของโครงการ:
$ docker-compose up -d --build จากนั้นคุณมีคอนเทนเนอร์ชื่อ package_base ซึ่งคุณสามารถเรียกใช้คำสั่ง composer และคำสั่ง php cli เช่น:
# 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) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม