在内联路由闭包函数中定义NuSOAP Web服务效果很好,但在路由闭包控制器中定义它就不行了。
示例:工作的
路径.php:
Route::any('api', function() {
require_once ('nusoap.php');
$server = new \nusoap_server();
$server->configureWSDL('TestService', false, url('api'));
$server->register('test',
array('input' => 'xsd:string'),
array('output' => 'xsd:string'),
);
function test($input){
return $input;
}
$rawPostData = file_get_contents("php://input");
return \Response::make($server->service($rawPostData), 200, array('Content-Type' => 'text/xml; charset=ISO-8859-1'));
});
SOAP测试客户端
require_once('nusoap.php');
$client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);
$result = $client->call("test", "HelloWorld");
print_r($result); exit();
回应
你好世界
这和预期的一样有效。
示例:不工作
将代码移动到专用控制器会破坏它:
路径.php:
Route::any('api', 'SoapController@server');
SOAP控制器.php文件:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SoapController extends Controller {
public function server() {
require_once ('nusoap.php');
$server = new \nusoap_server();
$server->configureWSDL('TestService', false, url('api'));
$server->register('test',
array('input' => 'xsd:string'),
array('output' => 'xsd:string'),
);
function test($input){
return $input;
}
$rawPostData = file_get_contents("php://input");
return \Response::make($server->service($rawPostData), 200, array('Content-Type' => 'text/xml; charset=ISO-8859-1'));
}
}
SOAP测试客户端
require_once('nusoap.php');
$client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);
$result = $client->call("test", "HelloWorld");
print_r($result); exit();
回应
“未在服务('''')中定义方法'test'('test')
重现步骤:
1.安装全新的Laravel v5.2.45
1.下载NuSOAP最新版本(v0.9.5)
1.定义NuSOAP Web服务的路由-复制并粘贴上面的代码
1.创建SoapController -复制并粘贴上面的代码
1.创建一个新的临时路由作为SOAP客户端,并将上面SOAP Test Client下的代码复制粘贴到该路由的闭包函数中
1.在浏览器中加载临时路由页以执行对Web服务的SOAP调用
结论:
这表明,由于某种原因,当使用内嵌路由功能与使用专用路由控制器时,输出不同。
怎么会这样?
非常感谢您的见解:
如果您有:
- 如果你有过这样的经验,你就会有一个解决方案
- 或者,您知道为什么会发生这种情况
- 或者,您对控制器中的NuSOAP代码生成的响应与内联路由函数中的不同有什么想法
...请插话。
感谢您的评分
2条答案
按热度按时间mgdq6dx11#
我有一个简单的解决办法。
只需通过composer安装nusoap即可。
composer require econea/nusoap
1.根据需要调用nusoap:
希望能帮上忙。
ymzxtsji2#
CSRF确认对于当前laravel版本应为被动。
app\Http\Middleware\VerifyCsrfToken.php
受保护的$except = [ '您方式' ];
肯定是的。