Как закодировать объект PHP в ответ nuSOAP? - PullRequest
0 голосов
/ 01 сентября 2010

Я создаю простой веб-сервис. У меня есть класс User PHP и веб-метод getUser для получения информации о пользователе.

Я объявил комплексный тип, и все, кажется, работает отлично.

$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 - это вернуть экземпляр User и иметь сериализацию nuSOAP для меня. Возможно ли это?

Редактировать: я пытался вернуть нового пользователя () для тестирования, но получил ответ

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

1 Ответ

1 голос
/ 02 сентября 2010

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

Если вы хотите вернуть массив пользовательских объектов из веб-службы 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);
...