2010-09-01 38 views
0

我正在構建一個簡單的WebService。我有一個用戶PHP類和一個webmethod getUser來檢索用戶的信息。如何將PHP對象編碼爲nuSOAP響應?

我已經聲明瞭一個complexType,並且一切看起來都很完美。

$server->wsdl->addComplexType('User', 
    'complexType','struct', 'all', '', 
    array( 'id' => array('name' => 'id', 'type' => 'xsd:int'), 
      'username' => array('name' => 'username','type' => 'xsd:string'), 
      'password' => array('name' => 'password','type' => 'xsd:string'), 
      'email' => array('name' => 'email','type' => 'xsd:string'), 
      'authority' => array('name' => 'authority','type' => 'xsd:int'), 
      'isActive' => array('name' => 'isActive','type' => 'xsd:int'), 
      'area' => array('name' => 'area','type' => 'xsd:string') 
    ) 
); 
$server->register('ws_getUser', 
    array('user_id' => 'xsd:integer'), 
    array('user' => 'tns:User'), 
    $namespace, 
    "$namespace#ws_getUser", 
    'rpc', 
    'encoded', 
    'Retorna un usuario' 
); 

function ws_getUser($user_id){ 
    return new soapval('return', 'tns:User', getUser($user_id)); 
} 

但是,在getUser函數中,我將檢索用戶信息爲assoc。數組,而不是用戶對象本身。

我想在getUser上做什麼就是返回一個User實例,並讓nuSOAP爲我進行序列化。這可能嗎?

編輯:我試過返回用於測試的新用戶(),但響應

<user xsi:type="tns:User"/> 

回答

1

想我已經找到了可能適用於這種情況下,這裏的答案:http://www.php.net/manual/en/class.soapserver.php

如果你想從一個web服務的NuSOAP返回一個自定義對象 數組,你 要投的對象數組 像這樣:

<?php 
$users = array(); 
while($res = $db_obj->fetch_row()) 
{ 
    $user = new user(); 
    $user->Id = $res['id']; 
    $user->Username = $res['username']; 
    $user->Email = $res['email']; 

    $users[] = (array) $user; 
} 

return ($users);