在Symfony2中调用SOAP Web服务

时间:2015-11-09 16:18:21

标签: php web-services symfony soap wsdl

在我的Symfony2项目中,我需要对WebService进行SOAP调用,所以我使用composer安装了besimple/soap-client并将其配置为:

parameters.yml:

soap_options:   wsdl:wsdl / test.wsdl

在services.xml中

<!-- Soap Client -->
<service id="project.test.soap.wrapper"
        class="Project\Test\Soap\SoapClientWrapper">
    <argument key="soap_options">%soap_options%</argument>
</service>

然后我将此服务注入我的Dto / TestTemplate.php

之一

接下来,我在besimple/soap-client创建的Soap目录中创建了一个Repositories目录,在此存储库中我添加了TestAttrebiutes.php文件:

namespace Project\Test\Soap\Repositories;

class TestAttributes {

    public $agentID;
    public $sourceChannel;
    public $organisationName;

    public function __construct(
        $agentID,
        $sourceChannel,
        $organisationName,
    ){
        $this->$agentID = $agentID;
        $this->$sourceChannel = $sourceChannel;
        $this->$organisationName = $organisationName;
    }
} 

现在在我的TestTemplate.php中我希望做到这样的事情:

$this->soap->__call(new FttpStatusAttributes(
    '100',
    'Web',
    'Ferrari'
), **ASKING FOR ATTRIBUTES);

但它要求我在添加属性后立即添加属性,我做错了是否有可能按照我尝试的方式进行...?

1 个答案:

答案 0 :(得分:1)

此代码可能是问题所在:

$this->$agentID = $agentID;
$this->$sourceChannel = $sourceChannel;
$this->$organisationName = $organisationName;

当您访问$this->$agentID时,您正在访问$this的成员,该成员的值为$agentID。所以例如如果$agentIDjohn123,那么您的代码实际上意味着

$this->john123 = 'john123';

这显然不是你想要的。您的代码应为:

$this->agentID = $agentID;
$this->sourceChannel = $sourceChannel;
$this->organisationName = $organisationName;

说实话,我不知道是否能解决问题,因为你的问题有点模糊,但这绝对是你想要解决的问题。