服务器配置我就不说了。
在服务端一定把服务的定义写在控制器外面,例如。
class Modulestock extends Frontend{
protected $noNeedLogin = ['*'];
public function info($moduleid = ''){
$item = new \app\index\model\Module();
$itemstock = new \app\index\model\Modulestock();
$iteminfo = $item->with('stocks')->find(['itemid'=>$moduleid]);
$tanteng = new \stdClass();
$tanteng->itemid = $iteminfo['itemid'];
$tanteng->name = $iteminfo['name'];
$tanteng->enname = $iteminfo['enname'];
$iteminfo2 = array();
return $iteminfo;
}
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : (isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');
$server = new \SoapServer(null,array('uri' => "abcd"));
$server->setClass("\app\index\controller\Modulestock");
//$server->service($HTTP_RAW_POST_DATA);
$server->handle();
注意uri,自己定义,在客户端调用的时候,要保持一致。
客户端调用
try{
$soap = new \SoapClient(null,array(
"location" => "http://www.andiff.net/admin/modulestock/info",
"uri" => "abcd", //资源描述符服务器和客户端必须对应
'trace' => true,
'encoding' =>'utf-8'));
//$soap->__soapCall('querySherry',$paras);
$s = $soap->info($this->request->param('ids'));
$arr = $s->relation;
$arr2 = array();
foreach ($arr['stocks'] as $k => $v) {
$arr2[$k]=get_object_vars($v);
}
$this->view->assign("s2",$arr2);
$this->view->assign("s",$s->data);
return $this->view->fetch();
}catch(Exction $e){
echo print_r($e->getMessage(),true);
}
这段代码可以放在任意一个控制器里面,说白了,服务端定义好了,客户端怎么调用都可以。