gpt4 book ai didi

php - 在 Controller 中使用 NuSOAP 的 Laravel 不工作

转载 作者:行者123 更新时间:2023-12-04 16:11:22 27 4
gpt4 key购买 nike

在内联路由闭包函数中定义 NuSOAP Web 服务效果很好,但将它定义在路由闭包 Controller 中则不然。

例子:工作

routes.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();

响应

HelloWorld

这按预期工作。

示例:不工作

将代码移动到专用 Controller 会破坏它:

routes.php:

Route::any('api', 'SoapController@server');

SoapController.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();

响应

"method 'test' ('test') not defined in service('' '')

重现步骤:

  1. 安装 Laravel v5.2.45 的全新副本
  2. 下载最新的 NuSOAP 版本 (v0.9.5)
  3. 定义 NuSOAP Web 服务的路由 - 复制并粘贴上面的代码
  4. 创建 SoapController - 复制并粘贴上面的代码
  5. 创建一个新的临时路由作为 SOAP 客户端,并将上面 SOAP Test Client 下的代码复制并粘贴到该路由的闭包函数中
  6. 在浏览器中加载临时路由页面以执行对 Web 服务的 SOAP 调用

结论:

这表明,出于某种原因,使用内联路由函数与使用专用路由 Controller 时的输出不同。

这怎么可能?

非常感谢您的见解:

如果你有:

  • 有这方面的经验并且您有解决方案
  • 或者,您知道为什么会发生这种情况
  • 或者,您对为什么在 Controller 中使用 NuSOAP 代码与在内联路由函数中产生不同的响应有任何想法

...请插话。

谢谢你的想法!

最佳答案

对此我有一个简单的解决方案。

只需安装 nusoap通过 Composer 。

  1. composer 需要 econea/nusoap
  2. 根据需要调用 nusoap:

    $client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);

希望对您有所帮助。

关于php - 在 Controller 中使用 NuSOAP 的 Laravel 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com