2010-09-01 9 views
0

Je construis un simple WebService. J'ai une classe utilisateur PHP et un webmethod getUser pour récupérer les informations d'un utilisateur.Comment encoder l'objet PHP en réponse nuSOAP?

J'ai déclaré un complexType et tout semble fonctionner parfaitement.

$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)); 
} 

Cependant, dans la fonction getUser, je récupère les informations utilisateur en tant qu'assoc. tableau, pas l'objet utilisateur lui-même. Ce que je voudrais faire sur getUser est de renvoyer une instance User à la place, et de le sérioter nuSOAP pour moi. Est-ce possible?

Edit: J'ai essayé de retourner un nouvel utilisateur() à des fins de test, mais la réponse est

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

Répondre

1

pense que je l'ai découvert une réponse qui peut demander à ce cas ici: http://www.php.net/manual/en/class.soapserver.php

Si vous voulez retourner un tableau d'objets personnalisé d'un webservice nusoap, vous devez jeter les objets aux tableaux comme ceci:

<?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);