ckWebServicePlugin中的复杂类型参数数组为Null

时间:2011-07-13 08:10:48

标签: soap symfony1 symfony-1.4 symfony-plugins

我正在使用symfony中的ckWebServicePlugin创建一个web服务。 我设法使用参数中的简单类型和返回的复杂类型创建一个方法并且它运行良好,但是当我尝试在参数中获取复杂类型的数组时,它似乎返回一个空值;

/api/actions.class.php

/** Allow to update request
*
* @WSMethod(name='updateRequests', webservice='api')
*
* @param RequestShort[] $arrRequests
*
* @return RequestShort[] $result
*/
public function executeUpdateRequests(sfWebRequest $request)
{
   $res = $request->getParameter('$arrRequests');
   $this->result = $res;
   return sfView::SUCCESS;
}

这是我的肥皂客户端

$test = array(array('request_id' => 1, 'statut' => 3), array('request_id' => 2, 'statut' => 3),);
$result = $proxy->updateRequests($test);

这是我的RequestShort类型

class RequestShort {
/**
* @var int
*/
public $request_id;
/**
* @var int
*/
public $statut;

public function __construct($request_id, $statut)
{
    $this->request_id = $request_id;
    $this->statut = $statut;
}
}

最后,我的app.yml

soap:
  # enable the `ckSoapParameterFilter`
  enable_soap_parameter: on
  ck_web_service_plugin:
    # the location of your wsdl file
    wsdl: %SF_WEB_DIR%/api.wsdl 
    # the class that will be registered as handler for webservice requests
    handler: ApiHandler
    soap_options:
      classmap:
        # mapping of wsdl types to PHP types
        RequestShort: RequestShort
        RequestShortArray: ckGenericArray

以下代码如何返回?

$res = $request->getParameter('$arrRequests');
$this->result = $res;

2 个答案:

答案 0 :(得分:1)

在我看来:

$res = $request->getParameter('$arrRequests');
$this->result = $res;
return sfView::SUCCESS;

您错误拼写了getParameter()函数的参数。

也许它应该是这样的:

$res = $request->getParameterHolder()->getAll();
$this->result = $res;
return sfView::SUCCESS;

为了以防万一,不要忘记做symfony cc && symfony webservice:generate-wsdl ...

答案 1 :(得分:0)

这是因为你得到了错误的参数。

$arrRequests != arrRequests

ckSoapParameterFilter 已将 @param $ arrRequests 转换为不带 $ 的简单参数,因此您不需要它。

它应该是:

public function executeUpdateRequests(sfWebRequest $request)
{
   $res = $request->getParameter('arrRequests');
   $this->result = $res;
   return sfView::SUCCESS;
}