الفئات التي تستخدمها الفئات التي تم إنشاؤها بواسطة مشروع PackageGenerator لتخفيف UX Soapclient.
الهدف من ذلك هو توفير فئات عامة ومفيدة على رأس الفصول التي تم إنشاؤها بواسطة مشروع PackageGenerator.
على سبيل المثال ، يسمح بسهولة بالحلق من خلال عناصر صفيف خاصية كائن نتائج SOAP ، فإنه يسمح بسهولة بتعيين رؤوس HTTP وصابون لطلب SOAP ويسمح بسهولة ملء كائن من تمثيل حالة الصفيف.
يجب استخدام الواجهات المحددة حتى تتمكن من مطابقة متطلبات الفئات التي تم إنشاؤها.
يجب استخدام هذه الواجهة لتحديد فئة enumtype جديدة.
هناك طريقة واحدة على الأقل/معظمها يجب تنفيذها ، لذا فهي سريعة جدًا لتنفيذها حتى لو لم ترى الهدف من ذلك:
$value التي تم تمريرها صالحة. يمكن القيام بذلك باستخدام مجموعة السلسلة التي يتم إرجاعها بواسطة طريقة getValidValues الموجودة دائمًا في فئات التعداد التي تم إنشاؤها.إذا كنت لا ترغب في تنفيذ هذه الطريقة ، فيمكنك أيضًا إنشاء صفك الخاص الذي يرث من فئة AbstractStenumbase الخاصة بنا.
يجب استخدام هذه الواجهة لتحديد فئة structype جديدة.
هناك طريقة واحدة على الأقل/معظمها يجب تنفيذها ، لذا فهي سريعة جدًا لتنفيذها حتى لو لم ترى الهدف من ذلك:
إذا كنت لا ترغب في تنفيذ هذه الطريقة ، فيمكنك أيضًا إنشاء فصلك الخاص الذي يرث من فئة AbstractStructBase الخاصة بنا.
يجب استخدام هذه الواجهة لتحديد فئة جديدة. الهدف من ذلك هو توفير أساليب فائدة حول هياكل المصفوفة المحددة من قبل WSDL من أجل تخفيف معالجة محتواه. لذلك ، ترث هذه الواجهة من واجهة structInterface الخاصة بنا بالإضافة
الطريقة الوحيدة التي يجب تنفيذها هي اسم getAttributeName ولكن كن على دراية بأنه يتم تنفيذه في كل فئة من فئة ArrayType التي تم إنشاؤها ، لذا لا داعي لتحديده. إنه مجرد تذكير بما هو متاح في فصول ArrayType.
لذلك ، في الأساس ، يجب عليك على الأقل تجاوز الأساليب المعلنة من خلال واجهات PHP التي ترث منها هذه الواجهة
إذا كنت لا ترغب في تنفيذ جميع الأساليب ، فيمكنك أيضًا إنشاء صفك الخاص الذي يرث من فئة BortctRuctArrayBase.
يجب استخدام هذه الواجهة لتحديد فئة قاعدة صابون جديدة لأي فئة 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 ، على التوالي. إذا تم حذفه ، يتم استخدام SOAP 1.1SOAP_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 لكسر الصابون الهيدرية الصحيحة للكائنات المستلمة.__get . تستخدم من قبل صفنا التجريدي StructArrayBase. $ 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 الخاصة بنا. إنه في الأساس نمط تصميم ديكور حيث أن الفصل يحتوي على كائن الصابون كخاصية ثابتة من أجل أن تكون قادرًا على تطبيق الأساليب عليه. إنها خاصية ثابتة من أجل الحصول على مفردة بين مكالمات متعددة (السماح بإرسال ملفات تعريف الارتباط تلقائيًا بين المكالمات). يمكن إعادة تعيينه عن طريق تمرير 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
بفضل صورة 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). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.