如何创建一个SOAP Web服务在Symfony控制器欧宝娱乐app下载地址

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何创建一个SOAP Web服务在Symfony控制器欧宝娱乐app下载地址

设置一个控制器作为SOAP服务器是由几个辅助工具。希望你有这些工具PHP SOAP安装扩展。目前作为PHP SOAP扩展不能生成WSDL,您必须从头创建一个或使用第三方生成器。

请注意

有几个可供使用PHP SOAP服务器实现。计算肥皂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日
/ / src /服务/ HelloService.php名称空间应用程序\服务;HelloService{私人美元梅勒;公共函数__construct(\ Swift_Mailer美元梅勒){美元- >梅勒=美元梅勒;}公共函数你好(美元的名字){美元消息= (\ Swift_Message (“你好服务”))- >该太空站(“me@example.com”)- >setBody (美元的名字说嗨!”);美元- >梅勒- >发送(美元消息);返回“你好,”美元的名字;}}

接下来,确保你的新类注册为一个服务。如果你使用默认服务配置,你不需要做任何事情!

最后,下面是一个例子,一个控制器,能够处理SOAP请求。因为index ()是通过/ 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日23日24日25日26日27日28
/ / src /控制器/ HelloServiceController.php名称空间应用程序\控制器;使用应用程序\服务\HelloService;使用欧宝娱乐app下载地址\\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用欧宝娱乐app下载地址\组件\路由\注释\路线;HelloServiceController扩展AbstractController{/ * * *@Route(“/ soap”) * /公共函数指数(HelloService美元helloService){美元soapServer=\ SoapServer (“/道路/ / hello.wsdl”);美元soapServer- >setObject (美元helloService);美元响应=反应();美元响应- >- >集(“内容类型”,text / xml;charset = iso - 8859 - 1 ');ob_start ();美元soapServer- >处理();美元响应- >setContent (ob_get_clean ());返回美元响应;}}

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

下面是一个例子,使用本机调用服务SoapClient客户端。这个例子假设index ()方法在上面的控制器是通过这条路线/ soap:

1 2 3
美元soapClient=\ SoapClient (“http://example.com/index.php/soap?wsdl”);美元结果=美元soapClient- >__soapCall (“你好”,(“名字”= >“斯科特。”]);

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: helloservicewsdl”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”><操作的名字=“你好”><欧宝体育电话>你好,世界< /欧宝体育电话><输入消息=“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/index.php/soap”/ >< /港口>< /服务>< /定义>
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode