SOAP, возвращаемые объекты(+)

Sherman

Mephi
SOAP, возвращаемые объекты(+)

Господа, а может кто-нибудь написать простой примерчик, какой должна быть схема элемента(и особенности wsdl файла для данного случая), чтобы soap client(php5.1) возвращал не stdCalss, а экземпляр класса контейнера.

вот скажем есть класс(контейнер):

PHP:
class TempObj
	{
		protected $obj = null;
		function __construct()
		{
			$this->obj = array(
			"id"=>0,
			"title"=>""
			);
		}
		function __get($key)
		{
			if (isset($this->obj[$key]))
			{
				return $this->obj[$key];
			}
			return null;
		}
		function __set($key, $value)
		{
			if (isset($this->obj[$key]))
			{
				$this->obj[$key] = $value;
			}			
		}
	}
есть класс бизнес логики:
PHP:
class Data
	{
		private $data = null;	
		function __construct()
		{
			$this->data = new TempObj();
		}
		private function Fill()
		{
			$this->data->id = 1;
			$this->data->title = "test";
		}
		public function Get()
		{
			$this->Fill();			
			return $this->data;
		}
	}
я экспортирую только метод Get().
 

chameleon

Новичок
вот такой примерчик не поможет?
PHP:
<?
####### server.php #######

class Contact {
var $ID = 0;
var $FirstName = "";
var $LastName = "";
var $PhoneNumber = "";

function LoadContact($id) {
...
}

function SaveToDB() {
...
}
}

class PhonebookService {
function GetContactById($id) {
$c = new Contact();
$c->LoadContact($id);
return $c;
}

function SaveContact($c) {
$c->SaveToDB();
}
}
$server = new SoapServer("phonebook.wsdl",
array("classmap" =>
array('Contact' => 'Contact'),
));
$server->setClass("PhonebookService");
$server->handle();
?>
PHP:
####### phonebook.wsdl ########
<types>
<schema
targetNamespace='http://10.0.0.1/soaptest/phonebook.schema2'
xmlns='http://www.w3.org/2001/XMLSchema'>
<complexType name="Contact">
<sequence>
<element name="ID" type="xsd:int" />
<element name="FirstName" type="xsd:string" />
<element name="LastName" type="xsd:string" />
<element name="PhoneNumber" type="xsd:string" />
</sequence>
</complexType>
</schema>
</types>

<message name='GetContactByIdRequest'>
<part name='id' type='xsd:int'/>
</message>
<message name='GetContactByIdResponse'>
<part name='Result' type='xsd2:Contact'/>
</message>
<message name='SaveNewContactRequest'>
<part name='NewContact' type='xsd2:Contact'/>
</message>
<message name='SaveNewContactResponse'>
<part name='NewID' type='xsd:string'/>
</message>

<portType name='PhonebookDataPortType'>
<operation name='GetContactById'>
<input message='tns:GetContactByIdRequest'/>
<output message='tns:GetContactByIdResponse'/>
</operation>
<operation name='SaveContact'>
<input message='tns:SaveNewContactRequest'/>
<output message='tns:SaveNewContactResponse'/>
</operation>
</portType>

########
 

Sherman

Mephi
теперь проблема вот в чем:

как отобразить схемой структуру, внутри кторой ассоциативный массив.

если сделать так:

PHP:
<s:complexType name="objType">		
<s:sequence> 
<s:element name="title" type="s:string" /> 
<s:element name="id" type="s:int" />
 </s:sequence>
</s:complexType>
это будет струткура, а внутри должен быть именно массив, т.к. структура даст еще один stdClass
 

chameleon

Новичок
имхо это уже нужно играться с [m]soapvar[/m] и [m]soapstruct[/m] для более детального описания передаваемых объектов языка.
 
Сверху