【问题标题】:How to include autoload in module in drupal 7如何在drupal 7的模块中包含自动加载
【发布时间】:2017-07-20 20:22:06
【问题描述】:

我想在drupal 的自定义模块中使用aws-sdk 作为php 客户端。我需要在模块中包含vendor/autoload.php。但是当我包含它时,它给了我错误。我尝试了很多方法,但没有成功。我将其添加为:

require __DIR__.'/vendor/autoload.php';.module 文件的顶部。然后网站就崩溃了。请你告诉我应该如何使用require __DIR__.'/vendor/autoload.php';

【问题讨论】:

  • 你需要为你的模块定义一个命名空间

标签: php drupal drupal-7 composer-php


【解决方案1】:

我不确定 drupal 如何处理外部 php 模块的自动加载。但是,凭借使用 laravel、cakephp 和 composer 等框架的经验,我确信目标文件 index.php 路由到根目录中的多个不同控制器已经包含 vendor/autoload.php。如果不包含,则添加相对于 index.php 或绝对路径指向 autoload.php 的 require 语句。然后在php中使用namespaces,你可以使用外部的php模块,然后自动加载。

require __DIR__.'/vendor/autoload.php'; // Incase vendor directory is in same level as index.php file
require dirname(__DIR__).'/vendor/autoload.php'; // Incase vendor directory is in parent level as index.php file

【讨论】:

    【解决方案2】:

    如果没有实际的错误消息,很难知道。如果出现白屏,则需要启用完整错误的显示 (admin/config/development/logging),这样您就可以看到实际发生的情况,以及您所依赖的类是否一开始就没有包含在内,或者有某种冲突(请记住在更改任何重要内容后清除缓存)。

    以下是我在自定义 D7 模块中添加 3rd 方包的方法:

    • 生成一个 composer.json 文件,将其安装在vendor/
    • 需要来自[modulename].modulevendor/autoload.php

    详细说明:

    • 切换到模块目录

    • 运行composer init

    • 按照提示(它会询问“您想以交互方式定义您的依赖项” - 选择“是”然后您可以按名称搜索)

    • 使用drupal-module 作为类型

    • 如果您不希望其他人使用您的代码,您可以使用“专有”获得许可,这是 composer.json 干净地验证 (composer validate)

    • 完成后,您应该有一个供应商目录,其中包括一个autoload.php 文件和/composer 目录。从您的 .module 文件中“要求”此内容,例如:

    require 'vendor/autoload.php';

    • drush cc all

    您现在应该可以使用您的代码了。


    请注意,有一个名为 xautoload 的 Drupal 模块 - (在我看来)这样做有点矫枉过正。

    我想知道 [modulename].info 中的 autoload.php 的简单 files[] = 行是否可行 - 无论顺序如何,它都行不通。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多