【问题标题】:Drupal 7 xautoload composerDrupal 7 xautoload 作曲家
【发布时间】:2014-02-01 12:38:22
【问题描述】:

所以我在 my_drupal_module/lib/Drupal/ 中使用 Composer 安装了 Paypal REST API (https://github.com/paypal/rest-api-sdk-php),现在我想在我的模块中的函数中使用命名空间。我知道我需要像 xautoload (https://drupal.org/project/xautoload) 这样的东西来做到这一点,所以我尝试了类似的东西:

$payer = new \Drupal\vendor\PayPal\Api\Payer;

有和没有第一个斜杠,最后有和没有括号,但它不起作用。我补充说:

需要 DIR 。 '/lib/Drupal/vendor/autoload.php';

但仍然没有,所以我评论了它。与此同时,我发现了这个:https://drupal.org/node/1976206,它解释了这个问题,但我不清楚到底应该在 hook_xautoload() 中写什么或直接注册我拥有的设置。有人可以帮忙吗?

【问题讨论】:

    标签: php drupal paypal drupal-7 composer-php


    【解决方案1】:

    您认为您需要 XAutoload 才能使用 Composer 安装的 Paypal API 的假设是错误的。

    要使 Composer 安装的任何代码可用,唯一需要做的就是在需要任何提供的类时在代码执行路径中包含 Composer 自动加载器。最简单的形式是在第一个 index.php(或任何 Drupal 使用的)文件中简单地要求 Composer 自动加载器,该文件回答每个请求(可能实例化更多 Drupal 类、模块和东西)。

    一旦代码执行到您自己的代码,自动加载允许您的代码包含您使用 Composer 包含的所有类。

    如何使用代码?不要为现有代码发明自己的命名空间,它不会起作用。 “\Drupal\vendor\PayPal\Api\Payer”对我来说听起来很不对,我怀疑正确的命名空间是“\PayPal\Api\Payer”。是的,that file does indeed exist。所以你必须使用它。

    如果仍然无法正常工作,抱怨无法加载类,那么 Composer 自动加载器文件未包含在您的脚本代码路径中。

    【讨论】:

    • 我在 Drupal 模块中使用 Paypal,它需要是独立的,修改像 index.php 这样的 Drupal 文件不是一个选项,也不被任何人推荐。我试图要求自动加载器并使用命名空间,但问题是 Drupal 7 是在 PHP 5.3 之前编写的,这意味着在命名空间之前,Drupal 对它们有一些问题。这就是我问这个问题的原因。
    【解决方案2】:

    没关系。我解决了。感谢 proloy03 给我的想法:https://drupal.org/node/2096621

    你不需要 xautoload 来加载类和命名空间,只需像这样实现 hook_init 即可:

    function my_module_init() {
        require __DIR__ . '/vendor/autoload.php';
    }
    

    然后在你的函数中写:

    $payer = new PayPal\Api\Payer();
    

    一切正常。

    【讨论】:

    • 谢谢。谢谢你。谢谢你。花时间发布这个答案。谢谢。
    • 不要使用 hook_init()。这是一个全局钩子,它会在您的 Drupal 站点的任何单个页面加载时触发。它非常昂贵。即使您不需要,您的 Paypal 库也会加载到网站的每个部分。
    • 那你有什么建议呢?如果您找到了我的方法的替代方法,请分享一下?
    【解决方案3】:

    使用 xautload 你可以做这样的事情...

    在 mymodule.module 中

    function mymodule_libraries_info() {
    
    'paypal' => array(
          'name' => 'PayPal SDK',
          'xautoload' => function($adapter) {
           $adapter->composerJson('composer.json'); 
         }
    }
    

    声明这允许您使用命名空间。喜欢

    use PayPal\Api\Amount;
    

    查看xautoload.api.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2021-10-05
      • 2021-02-28
      • 1970-01-01
      • 2014-05-10
      • 2021-06-09
      • 2022-06-20
      相关资源
      最近更新 更多