如何创建一个SOAP Web服务在Symfony控制器ob娱乐下载
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
如何创建一个SOAP Web服务在Symfony控制器ob娱乐下载
设置一个控制器作为SOAP服务器与几个简单的工具。当然,你必须有PHP SOAP安装扩展。作为PHP SOAP扩展目前不能生成WSDL,您必须从头创建一个或使用第三方生成器。
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
/ / 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
对象正确:
1 2 3 4 5
# app / config / services.yml服务:hello_service:类:Acme \ SoapBundle \ \ HelloService服务参数:[" @mailer "]
1 2 3 4 5 6
< !——app / config /服务。xml - - ><服务><服务id=“hello_service”类=“Acme \ SoapBundle \ \ HelloService服务”><论点类型=“服务”id=“梅勒”/ >< /服务>< /服务>
1 2 3 4
/ / app / config / services.php美元容器- >注册(“hello_service”,“Acme \ SoapBundle \ \ HelloService服务”)- >addArgument (新引用(“梅勒”));
下面是一个例子的控制器能够处理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”/ >< /港口>< /服务>< /定义>