yii2 web service plugin 使用及安装说明(前面有一点英文后面都是中文)
=================
Installation
这里用的是这个插件的官方介绍,并且作了一些改变,请注意看细节,本编是中文编写,只是前面引用了一点官方的介绍文档
The preferred way to install this extension is through composer.
To install, either run
$ php composer.phar require conquer/services "*"
or add
"conquer/services": "*"
to the require
section of your composer.json
file.
Usage
namespace app\controllers;
class SiteController extends \yii\web\Controller
{
public function actions()
{
return [
'soap' => [
'class' => 'conquer\services\WebServiceAction',
'classMap' => [
'MyClass' => 'app\controllers\MyClass'
],
],
];
}
/**
* @param string $str
* @return mixed
* @soap
*/
public function soapTest($str)
{
return $str;
}
/**
* 上面就是服务器的配置
* 为了方便,我就在一台机器上做测试了,演示我的demo
* 下面开始写访问者的代码了
*/
public function actionIndex()
{
/**
* 首先, 需要new soapClient的对象,对象里面传服务器的 wsdl的url,
* 这个url 怎么生成的,在下面的文字说明里面有提到
* 其次,调用服务定义好的接口方法,由上面服务器的配置,我们可以知道
* 我定义的接口方法就是soapTest
* 然后,正常情况下,应该是运行了,但是如果由问题请注意我下面列出的问题,以及解决方案
*/
$client=new SoapClient('http://www.qmerp.com/index.php?r=site%2Fsoap');
echo $client->soapTest('hello world');
// $result = $client->__getFunctions();
// var_dump($result);
}
}
以上是我根据这个插件提供的使用指南
注意事项
- 首先,需要在actions里面,注册好一个这个插件提供的aciton方法,这个方法会搭建一个
webservice 服务,并且会生成一个wsdl url(这里我们可以知道这个url就是访问这个action的url, site/soap, 我的生成的地址为: http://www.qmerp.com/index.php?r=site%2Fsoap), 以及一个wsdl 的dom结构(这个结构是根据
相关的操作生成的,具体怎么生成,下面细讲)
- 其次,写一个接口方法,供访问者使用 我们这里写的接口方法是soapTest(str);在写这个接口方法需要特别注意
这个方法的注释,
- 第一个坑注释里面必须要由 @soap这个东西,如果没有,客户端是没有办法调用到这个接口方法的,会报一个
错误信息翻译过来就是:这个方法没有, 这个坑坑了我好几个小时,网上各种找文档都没有解决方案。
- 第二个坑就是:当你注释里面由这一段,但还是告诉你没有这个方法的时候,你的内心是崩溃的,但是当你看到这个文档时候
你就不用担心这个问题了, 请到php.ini里面 找到 ‘;opcache.save_comments=1’,把前面的分号去掉,这个操作可以
理解为,不要去掉程序里面的注释 , 现在你应该明白为啥加了注释还是没有效果了吗?
- 第三个坑是: 怎么传递参数,由的同学可能在传递参数这个环节出问题,传递参数的时候也要特别注意注释的写法,
正确的而写法格式应该是 ’ @param xxx(这里是参数类型,这个很重要)$str ‘, 因为中间没有这个参数类型的话,你也是没有办法
调用到这个接口方法的,最重要的是 @param 一定要有, 其次 还需要 xxx(这个字符串,这里面不能包含除了单字符以外的字符) 然后
接上你的参数就可以了
- 另外如果是什么包,库没有安装的,请自行百度或者google解决
- 如果还有遇到其他坑的,可以在下面留言交流