Массив параметров сложного типа в ckWebServicePlugin равен Null - PullRequest
0 голосов
/ 13 июля 2011

Я делаю веб-сервис с помощью ckWebServicePlugin в Symfony.Мне удалось создать метод с простым типом в параметре и сложным типом в ответ, и он работал хорошо, но когда я попытался получить массив сложного типа в параметре, он, кажется, возвращает мне нулевое значение;

/ 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 ]

1 голос
/ 02 апреля 2012

Мне кажется, что в:

$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 ... на всякий случай.

0 голосов
/ 23 апреля 2014

Это потому что вы получаете неверный параметр.

$arrRequests != arrRequests

ckSoapParameterFilter уже переводит @ param $ arrRequests в простой параметр без $ , поэтому он вам не нужен.

должно быть:

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