如何在Symfony控制器中创建SOAP Web服务ob娱乐下载
编辑本页如何在Symfony控制器中创建SOAP Web服务ob娱乐下载
有几个工具可以帮助设置充当SOAP服务器的控制器。这些工具希望你有PHP SOAP安装扩展。由于PHP SOAP扩展目前不能生成WSDL,您必须从头创建一个WSDL,或者使用第三方生成器。
SOAP通过将PHP对象的方法暴露给外部实体(即使用SOAP服务的人)来工作。首先,创建一个类-HelloService
——它表示您将在SOAP服务中公开的功能。在这种情况下,SOAP服务将允许客户机调用已调用的方法你好
,它正好发送了一封电子邮件:
12 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 /服务/ HelloService.php名称空间应用程序\服务;使用ob娱乐下载\组件\梅勒\MailerInterface;使用ob娱乐下载\组件\Mime\电子邮件;类HelloService{私人MailerInterface$梅勒;公共函数__construct(MailerInterface$梅勒){$这->梅勒=$梅勒;}公共函数你好(字符串$的名字):字符串{$电子邮件= (新电子邮件())->从(“admin@example.com”)->(“me@example.com”)->主题(“你好服务”)->文本($的名字.“你好!”);$这->梅勒->发送($电子邮件);返回“你好,”.$的名字;}}
接下来,确保新类已注册为服务。如果你在用默认服务配置你什么都不需要做!
最后,下面是一个能够处理SOAP请求的控制器示例。因为index ()
可通过/ soap
, WSDL文档可以通过/肥皂吗?wsdl
:
12 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
/ / src /控制器/ HelloServiceController.php名称空间应用程序\控制器;使用应用程序\服务\HelloService;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类HelloServiceController扩展AbstractController{#(路线(/ soap)]公共函数指数(HelloService$helloService,请求$请求){$soapServer=新\ SoapServer (“/道路/ / hello.wsdl”);$soapServer->setObject ($helloService);$响应=新反应();ob_start ();$soapServer->处理($请求->getContent ());$响应->setContent (ob_get_clean ());foreach(headers_list ()作为$头) {$头=爆炸(“:”,$头,2);$响应->头->集($头[0],$头[1]);} header_remove ();返回$响应;}}
注意对的调用ob_start ()
而且ob_get_clean ()
.这些方法控制输出缓冲这允许您“捕获”的回显输出服务器- >处理()
.这是必要的,因为Symfony期望您的控制器返回一个ob娱乐下载响应
对象,将输出作为其“内容”。所以,你用ob_start ()
开始缓冲STDOUT并使用ob_get_clean ()
将回显输出转储到响应的内容中,并清除输出缓冲区。自服务器- >处理()
可以设置报头,也有必要“陷阱”这些。我们用headers_list
它提供了集头,这些然后解析并添加到响应后header_remove
用于删除标头并避免重复。最后,您准备返回响应
.
下面是一个使用本机调用服务的示例SoapClient客户端。这个例子假设index ()
方法可以通过路由访问/ soap
:
1 2 3
$soapClient=新\ SoapClient (“http://example.com/index.php/soap?wsdl”);$结果=$soapClient->__soapCall (“你好”, (“名字”= >“斯科特。”]);
下面是一个WSDL示例。
12 34 56 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”><操作的名字=“你好”><欧宝官网下载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/index.php/soap”/>港口>服务>定义>
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
版本: