所以我安装了Paypal REST API(https://github.com/paypal/rest-api-sdk-php)在my_drupal_module/lib/drupal/中使用Composer,现在我想在模块中的一个函数中使用名称空间。我知道我需要类似xautoload(https://drupal.org/project/xautoload),所以我尝试了一些类似的东西:
$payer=new\Drupal\vendor\PayPal\Api\payer;
有和没有第一个斜杠,结尾有和没有括号,但它不起作用。我补充道:
需要DIR。'/lib/Drupal/vender/autoload.php’;
但仍然没有,所以我评论了它。与此同时,我发现:https://drupal.org/node/1976206这解释了这个问题,但我不清楚在hook_xautoload()中到底该写什么,或者直接注册我的设置。有人能帮忙吗?
永不终止。我解决了它。感谢proroy03给了我这个想法:https://drupal.org/node/2096621
您不需要xautoload来加载类和命名空间,只需实现hook_init就可以这样要求:
function my_module_init() {
require __DIR__ . '/vendor/autoload.php';
}
然后在你的函数中写:
$payer = new PayPalApiPayer();
一切都很好。
使用xautload,您可以执行以下操作。。。
在mymodule.module 中
function mymodule_libraries_info() {
'paypal' => array(
'name' => 'PayPal SDK',
'xautoload' => function($adapter) {
$adapter->composerJson('composer.json');
}
}
声明此项允许您使用命名空间。像
use PayPalApiAmount;
检查xautoload.api.php
您认为您需要XAutoload才能使用Composer安装的Paypal API的假设是错误的。
要使Composer安装的任何代码可用,唯一需要的就是在需要任何提供的类时,在代码执行路径中包含Composer自动加载器。最简单的形式是简单地在第一个index.php(或Drupal使用的任何文件)文件中要求Composer自动加载器来回答每个请求(可能实例化更多的Drupal类、模块和东西)。
一旦代码执行到您自己的代码中,自动加载允许您的代码包含Composer中包含的所有类。
如何使用代码?不要为现有代码创建自己的名称空间,它将不起作用。"\Drupal\vendor\PayPal\Api\Payer"听起来很不对,我怀疑正确的命名空间是"\PayPal\Api\Payers"。是的,那个文件确实存在。所以你必须使用它。
如果它仍然不起作用,抱怨类无法加载,那么Composer自动加载器文件就不包括在脚本代码路径中。