在Magento事件监听器中创建nussoap对象会引发异常



在Magento 1.7.0.2中,我创建了一个事件侦听器,每次应用程序检查产品的最终价格时都会触发该事件(最终代码不会触发该事件,但为了测试方便,我在这里尝试)。

事件触发很好,并相应地更改价格,但是当我尝试创建一个nussoap对象以对外部web服务进行非wsdl调用时,它会发出警告,并且不创建客户端对象。

代码是:

    $endpoint = 'http://[ip]:155/[client_name]/[client_name].soap2';
    try {
        $client = new nusoap_client($endpoint);
    } catch (Exception $e) {
        echo $e->getMessage();
    }

和警告:

Warning: include(Nusoap/Client.php) 
[<a href="function.include">function.include</a>]: 
failed to open stream: No such file or directory  in 
/var/www/clients/client3/magento/lib/Varien/Autoload.php on line 93

如果在Magento根目录上执行相同的代码,我甚至可以调用正确的web服务并解析响应。

我已经在Magento根库目录中包含了nussoap库(v. 0.9.5),并且我没有特别要求它们

你已经发现了你的问题

我已经将nussoap库(v. 0.9.5)包含在Magento根库目录中,并且我没有特别需要它们

当您尝试使用nusoap_client类实例化对象时,PHP找不到该类。根据标准行为,它调用Magento自动加载器方法,该方法将类nusoap_client转换为文件路径Nusoap/Client.php,然后尝试对该文件进行include。PHP,根据标准include行为,查找

处的文件
app/code/local/Nusoap/Client.php
app/code/community/Nusoap/Client.php
app/code/core/Nusoap/Client.php
lib/Nusoap/Client.php
path/of/the/calling/script/Nusoap/Client.php

这些位置都没有文件,所以PHP会发出警告。手动需要您的nusoap对象,在上述路径之一放置对象的加载器,或者添加一个处理库位置的自定义自动加载器。

最新更新