代码之家  ›  专栏  ›  技术社区  ›  Ignacio

如何将PHP对象编码为nuSOAP响应?

  •  0
  • Ignacio  · 技术社区  · 14 年前

    我正在构建一个简单的web服务。我有一个User PHP类和一个webmethod getUser来检索用户的信息。

    我已经声明了一个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函数中,我是以关联数组的形式检索用户信息,而不是用户对象本身。

    Edit:为了测试,我尝试返回一个新的User(),但是响应是

    <user xsi:type="tns:User"/>
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Ignacio    14 年前

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