在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
对象,在上述路径之一放置对象的加载器,或者添加一个处理库位置的自定义自动加载器。