私はSOAPを使ってオブジェクトや配列をPHPに/から返す必要があります。いいリンクはありますか?PHP SOAP:SOAPを使用してPHPからオブジェクトを返すにはどうすればよいですか?
答えて
私はこれをZend articleに教えています。これは、Soap(特にPHP5の実装)を扱うクライアントとサーバーの両方の面で多くの良い例があります。良い出発点のように見えます。
WSDLを手作業で書くことを考えていたら、PHPのリフレクションクラスを使用してWSDLを動的に生成するWSHelperを使用することをお勧めします。間違いなく時間を節約する
基本的にクラスマップを作成し、それをあなたの石鹸クライアントに渡す必要があります。はい、それは痛みです。私は通常、Soap Objectの名前をPHPオブジェクト(つまりPerson => MY_Person
)にマップし、必要なものだけを手作業でコード化するメソッドを用意しています(つまりcreatedOn => DateTime
)。
class MY_WSHelper
{
protected static $ws_map;
public static function make_map()
{
if(! self::$ws_map)
{
self::$ws_map = array();
//These will be mapped dynamically
self::$ws_map['Person'] = NULL;
self::$ws_map['Animal'] = NULL;
//Hard-coded type map
self::$ws_map['createdOn'] = DateTime;
self::$ws_map['modifiedOn'] = DateTime;
foreach(self::$ws_map as $soap_name => $php_name)
{
if($php_name === NULL)
{
//Map un-mapped SoapObjects to PHP classes
self::$ws_map[$soap_name] = "MY_" . ucfirst($soap_name);
}
}
}
return self::$ws_map;
}
}
クライアント:
$client = new SoapClient('http://someurl.com/personservice?wsdl',
array('classmap' => MY_WSHelper::make_map()));
$aperson = $client->getPerson(array('name' => 'Bob'));
echo get_class($aperson); //MY_Person
echo get_class($aperson->createdOn); //DateTime
私はZend_Soap_ServerのиにZend_Soap_Clientを使用しています。私は難しい構造の配列を送受信します。
まず、受信したい構造を持つクラスを作成します。
<?php
/**
* Information about people
*/
class PeopleInformation
{
/**
* Name of ...
*
* @var string
*/
public $name;
/**
* Age of
* @var int
*/
public $age;
/**
* Array of family
*
* @var FamilyInformation[]
*/
public $family;
}
/**
* Information about his family
*/
class FamilyInformation
{
/**
* Mother/sister/bro etc
*
* @var string
*/
public $relation;
/**
* Name
* @var string
*/
public $name;
}
?>
次に、このデータを受信するためのサービスを作成します。
<?php
/**
* Service to receive SOAP data
*/
class SoapService
{
/**
*
* @param PeopleInformation $data
* @return string
*/
public function getUserData($data)
{
//here $data is object of PeopleInformation class
return "OK";
}
}
?>
は今URL http://ourhost/soap/によってコントローラにZend_Soap_Serverのインスタンスを作成します。
<?php
//disable wsdl caching
ini_set('soap.wsdl_cache_enabled', 0);
ini_set('soap.wsdl_cache', 0);
$wsdl = $_GET['wsdl'];
//this generate wsdl from our class SoapService
if (!is_null($wsdl))
{
$autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence');
$autodiscover->setClass('SoapService');
$autodiscover->handle();
}
//handle all soap request
else
{
$wsdlPath = 'http://ourhost/soap/?wsdl';
$soap = new Zend_Soap_Server($wsdlPath, array(
'cache_wsdl' => false
));
$soap->registerFaultException('Zend_Soap_Server_Exception');
$soap->setClass('SoapService');
$soap->handle();
}
?>
そして今、あなたは、WSDL(HTTP GET:// ourhostを/ soap /?wsdl)を使用して、SoapService :: getUserDataに構造と処理のリクエストを送信します。このメソッドの入力パラメータはのオブジェクトですPeopleInformationクラス
私は(悪い)経験を共有するために、再生します。
PHP ZendFramework2(ZF2)を使用してWebサービスを作成しました。
サーバはオブジェクトとオブジェクトの配列を返答し、それが入力として文字列を受け取るまでうまくいきました。私はArrayOfTypeComplex戦略を使用していました。
$_strategy = new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeComplex();
私は、入力として文字列の配列を使用しようと、私はラミルの答えを見つけるまで、私は暗いと不幸な谷に感じたので、私は戦略とすべての作業の権利を変更!
$_strategy = new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeSequence();
if (isset($_GET['wsdl'])) {
$autodiscover = new \Zend\Soap\AutoDiscover($_strategy);
$autodiscover->setBindingStyle(array('style' => 'document'));
$autodiscover->setOperationBodyStyle(array('use' => 'literal'));
$autodiscover->setClass('Tracker\Queue\Service')
->setUri($_serverUrl);
echo $autodiscover->toXml();
}
- 1. PHPでarray_shift()を使ってオブジェクトを返すにはどうすればよいですか?
- 2. showInputDialogを使用してドロップダウンからオブジェクトを返すにはどうすればよいですか?
- 3. JOINを使用してPHPからmysqlをクエリするにはどうすればよいですか?
- 4. PHPを使用してmySQLから値NULLを取得するにはどうすればよいですか?
- 5. PHPを使用してHTMLファイルからメタデータを取得するにはどうすればよいですか?
- 6. PHPからWMIを使うにはどうすればいいですか
- 7. リクエストURLをJSONPからデコードするにはどうすればいいですか? PHPを使用して
- 8. PHPからXMLメッセージを返すにはどうしたらいいですか?
- 9. php-curlを使用してローカルにバイナリファイルをPOSTでPOSTするにはどうすればよいですか?
- 10. PHPのSDKを使用してFacebookで再認証を行うにはどうすればよいですか?
- 11. ajaxリクエストを使用して、春のコントローラからビューを返すにはどうすればよいですか?
- 12. PHPでSimpleXMLを使用してXMLノードを再配置するにはどうすればよいですか?
- 13. Magentoモジュールでphpを使用してメタタグを設定するにはどうすればよいですか?
- 14. PHPを使用してカール経由でリクエストを分析するにはどうすればよいですか?
- 15. PHPを使用してMySQLで検索インデックスを取得するにはどうすればよいですか?
- 16. PHPでURLを使用して変数を渡すにはどうすればよいですか?
- 17. cURLを使用してPHPでPATCHリクエストを作成するにはどうすればよいですか?
- 18. phpを使用してURLにvarsを取得するにはどうすればよいですか?
- 19. MAMP + MacOSx + PHPを使用してローカルホストにクッキーを設定するにはどうすればよいですか?
- 20. PHPを使用して変数列をCSVファイルにエクスポートするにはどうすればよいですか?
- 21. PHPを使用してswfファイルにリンクを挿入するにはどうすればよいですか?
- 22. PHPでFDPFを使用してテキストに下線を付けるにはどうすればよいですか?
- 23. PHPでsnkファイルを使用してデータに署名するにはどうすればよいですか?
- 24. サブソニックのオブジェクトを介して結合テーブルからデータを返すにはどうすればよいですか?
- 25. ajaxを使用してファイルからJSONオブジェクトをロードするにはどうすればよいですか?
- 26. OSXからTotal MemoryとFree Memoryを取得して、PHPプログラムから使用できるようにするにはどうすればよいですか?
- 27. PHPを使用してディレクトリを保護するにはどうすればよいですか?
- 28. PHPとJavaScriptを使用してセンテンスを検証するにはどうすればよいですか?
- 29. PHPを使用してこのシナリオを実装するにはどうすればよいですか?
- 30. PHPを使用してURL全体をキャプチャするにはどうすればよいですか?
あなたはphp5またはphp4を使用していますか? –