2010-09-01 3 views
0

Я строю простой WebService. У меня есть пользовательский класс PHP и веб-метод 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 я получаю информацию о пользователе в качестве связующего. массив, а не сам пользовательский объект.

То, что я хотел бы сделать на getUser, это вернуть экземпляр пользователя вместо этого, и его nuSOAP сериализует для меня. Это возможно?

Edit: Я пытался возвращение нового пользователя() для целей тестирования, но ответ

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

ответ

1

Guess Я узнал ответ, который может применить к этому случаю здесь: http://www.php.net/manual/en/class.soapserver.php

Если вы хотите вернуть пользовательский объект массив из NuSOAP WebService, вы должны бросить объекты, массивы так:

<?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); 
Смежные вопросы