Php Drupal 7 xautoload作曲家
因此,我在我的_drupal_module/lib/drupal/中安装了带有Composer的paypalrestapi(),现在我想在模块中的函数中使用名称空间。我知道我需要像xautoload()这样的东西来实现这一点,所以我尝试了如下方法: $payer=new\Drupal\vendor\PayPal\Api\payer 有无第一个斜杠,结尾有无括号,但都不起作用。我补充说: 需要目录'/lib/Drupal/vendor/autoload.php'Php Drupal 7 xautoload作曲家,php,drupal,paypal,drupal-7,composer-php,Php,Drupal,Paypal,Drupal 7,Composer Php,因此,我在我的_drupal_module/lib/drupal/中安装了带有Composer的paypalrestapi(),现在我想在模块中的函数中使用名称空间。我知道我需要像xautoload()这样的东西来实现这一点,所以我尝试了如下方法: $payer=new\Drupal\vendor\PayPal\Api\payer 有无第一个斜杠,结尾有无括号,但都不起作用。我补充说: 需要目录'/lib/Drupal/vendor/autoload.php' 但还是没什么,所以我评论了一下。同
但还是没什么,所以我评论了一下。同时,我发现:这解释了这个问题,但我不清楚在hookxautoload()中到底写什么,或者直接注册我的设置。有人能帮忙吗?您认为需要XAutoload才能使用Composer安装的Paypal API是错误的 要使Composer安装的任何代码可用,唯一需要做的就是在需要提供的任何类时,在代码执行路径中包含Composer autoloader。最简单的形式是在第一个index.php(或Drupal使用的任何文件)文件中简单地要求Composer autoloader来响应每个请求(可能实例化更多Drupal类、模块和东西) 一旦代码执行到您自己的代码中,自动加载将允许您的代码包含Composer中包含的所有类 如何使用代码?不要为现有代码创建自己的名称空间,它将不起作用。“\Drupal\vendor\PayPal\Api\Payer”听起来非常错误,我怀疑正确的名称空间是“\PayPal\Api\Payer”。是的。所以你必须使用它
如果仍然不起作用,抱怨类无法加载,则脚本代码路径中不包括Composer autoloader文件。Nevermind。我解决了。感谢proloy03,他给了我这个想法: 加载类和名称空间不需要xautoload,只需实现hook_init即可:
function my_module_init() {
require __DIR__ . '/vendor/autoload.php';
}
然后在函数中写入:
$payer = new PayPal\Api\Payer();
这一切都很有效。使用xautload,您可以执行以下操作 在mymodule.module中
function mymodule_libraries_info() {
'paypal' => array(
'name' => 'PayPal SDK',
'xautoload' => function($adapter) {
$adapter->composerJson('composer.json');
}
}
声明此名称允许您使用名称空间。像
use PayPal\Api\Amount;
检查我在Drupal模块中使用Paypal,这需要是独立的,修改Drupal文件(如index.php)不是一个选项,任何人都不推荐。我试图要求自动加载器并使用名称空间,但问题是Drupal7是在PHP5.3之前编写的,这意味着在名称空间之前,Drupal对它们有点问题。这就是我问这个问题的原因。谢谢。非常感谢。非常感谢。感谢您花时间发布此答案。谢谢。不要使用hook_init()。这是一个全局钩子,在Drupal站点上加载任何一个页面时都会触发。非常贵。您的Paypal库将加载到网站的每一部分,即使您不需要它。那么您有什么建议?如果你找到了一个替代我的方法,那么请分享它?