Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal 7 xautoload作曲家_Php_Drupal_Paypal_Drupal 7_Composer Php - Fatal编程技术网

Php Drupal 7 xautoload作曲家

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' 但还是没什么,所以我评论了一下。同

因此,我在我的_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库将加载到网站的每一部分,即使您不需要它。那么您有什么建议?如果你找到了一个替代我的方法,那么请分享它?