如何创建一个SOAP Web服务在Symfony2控制器ob娱乐下载

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何创建一个SOAP Web服务在Symfony2控制器ob娱乐下载

设置一个控制器作为SOAP服务器与几个简单的工具。当然,你必须有PHP SOAP安装扩展。作为PHP SOAP扩展目前不能生成WSDL,您必须从头创建一个或使用第三方生成器。

请注意

有几个可供使用PHP SOAP服务器实现。Zend肥皂NuSOAP是两个例子。虽然在这些示例中,使用PHP SOAP扩展大意仍应适用于其他实现。

SOAP是通过让一个PHP对象的方法外部实体(即使用SOAP服务的人)。首先,创建一个类HelloService——代表你会暴露在SOAP服务的功能。在这种情况下,SOAP服务将允许客户端调用一个方法调用你好,这发生在发送一个电子邮件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
/ / src / Acme / SoapBundle /服务/ HelloService.php名称空间Acme\SoapBundle\服务;HelloService{私人美元梅勒;公共函数__construct(\ Swift_Mailer美元梅勒){美元- >梅勒=美元梅勒;}公共函数你好(美元的名字){美元消息= \ Swift_Message::newInstance ()- >该太空站(“me@example.com”)- >setSubject (“你好服务”)- >setBody (美元的名字说嗨!”);美元- >梅勒- >发送(美元消息);返回“你好,”美元的名字;}}

接下来,您可以训练Symfony能够创建ob娱乐下载这个类的一个实例。因为类发送一封电子邮件,这是设计的接受Swift_Mailer实例。使用服务容器,您可以配置构造一个Symfonyob娱乐下载HelloService对象正确:

  • YAML
  • XML
  • PHP
1 2 3 4 5
# app / config / config.yml服务:hello_service:类:Acme \ SoapBundle \ \ HelloService服务参数:[" @mailer "]

下面是一个例子的控制器能够处理SOAP请求。如果indexAction ()通过这条路线吗/ soap,然后可以通过检索WSDL文档wsdl / soap ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
名称空间Acme\SoapBundle\控制器;使用ob娱乐下载\\FrameworkBundle\控制器\控制器;使用ob娱乐下载\组件\HttpFoundation\响应;HelloServiceController扩展控制器{公共函数indexAction(){美元服务器=\ SoapServer (“/道路/ / hello.wsdl”);美元服务器- >setObject (美元- >get (“hello_service”));美元响应=反应();美元响应- >- >集(“内容类型”,text / xml;charset = iso - 8859 - 1 ');ob_start ();美元服务器- >处理();美元响应- >setContent (ob_get_clean ());返回美元响应;}}

注意的调用ob_start ()ob_get_clean ()。这些方法控制输出缓冲它允许你“陷阱”的呼应输出$服务器- >处理()。这是必要的,因为Symfony预计控制器返回ob娱乐下载响应对象的输出作为其“内容”。你也必须记住设置内容类型”头“text / xml”,因为这是客户端将期待什么。所以,你使用ob_start ()开始缓冲STDOUT和使用ob_get_clean ()将响应的响应输出到内容和明确的输出缓冲区。最后,你准备返回响应

下面是一个示例调用服务使用NuSOAP客户端。这个例子假设indexAction在上面的控制器是通过这条路线/ soap:

1 2 3
美元客户端=\ Soapclient (“http://example.com/app.php/soap?wsdl”,真正的);美元结果=美元客户端- >调用(“你好”,数组(“名字”= >“斯科特。”));

WSDL是一个例子。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
< ?xml version = " 1.0 " encoding =“iso - 8859 - 1”? ><定义xmlns: SOAP-ENV=“http://schemas.xmlsoap.org/soap/envelope/”xmlns: xsd=“http://www.w3.org/2001/XMLSchema”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns: SOAP-ENC=“http://schemas.xmlsoap.org/soap/encoding/”tns:=“urn: arnleadservicewsdl”xmlns:肥皂=“http://schemas.xmlsoap.org/wsdl/soap/”xmlns: wsdl=“http://schemas.xmlsoap.org/wsdl/”xmlns=“http://schemas.xmlsoap.org/wsdl/”targetNamespace=“urn: helloservicewsdl”><类型><xsd:模式targetNamespace=“urn: hellowsdl”><xsd:进口名称空间=“http://schemas.xmlsoap.org/soap/encoding/”/ ><xsd:进口名称空间=“http://schemas.xmlsoap.org/wsdl/”/ >< /xsd:模式>< /类型><消息的名字=“helloRequest”><部分的名字=“名称”类型=" xsd: string "/ >< /消息><消息的名字=“helloResponse”><部分的名字=“回归”类型=" xsd: string "/ >< /消息><portType的名字=“hellowsdlPortType”><操作的名字=“你好”><欧宝官网下载app>你好,世界< /欧宝官网下载app><输入消息=“tns: helloRequest”/ ><输出消息=“tns: helloResponse”/ >< /操作>< /portType><绑定的名字=“hellowsdlBinding”类型=“tns: hellowsdlPortType”><soap:绑定风格=“rpc”运输=“http://schemas.xmlsoap.org/soap/http”/ ><操作的名字=“你好”><soap: operationsoapAction=“urn: arnleadservicewsdl #你好”风格=“rpc”/ ><输入><soap:身体使用=“编码”名称空间=“urn: hellowsdl”encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”/ >< /输入><输出><soap:身体使用=“编码”名称空间=“urn: hellowsdl”encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”/ >< /输出>< /操作>< /绑定><服务的名字=“hellowsdl”><港口的名字=“hellowsdlPort”绑定=“tns: hellowsdlBinding”><soap:地址位置=“http://example.com/app.php/soap”/ >< /港口>< /服务>< /定义>
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。