我想在drupal的自定义模块中使用php客户端的aws-sdk
。我需要在模块中包含vendor/autoload.php
。但是当我包含它时,它给了我错误。我试图包括很多方法,但没有成功。我将其添加为:
require __DIR__.'/vendor/autoload.php';
.module
文件的文件顶部。然后网站崩溃了。请您告诉我应该如何使用require __DIR__.'/vendor/autoload.php';
我不确定drupal如何处理外部php模块的自动加载。但是,凭借使用laravel,cakephp和composer等框架的经验,我确信索引的目标文件.php它路由到根目录中的多个不同控制器已经包括vendor/autoload.php。如果它不包括,请添加 require 语句,该语句指向自动加载.php相对于索引.php或绝对路径。 然后在 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
如果没有实际的错误消息,很难知道。如果你看到一个白屏,你需要启用完整错误的显示(admin/config/development/logging
),这样你可以看到实际发生了什么,以及你依赖的类是否没有被包括在内,或者有某种冲突(还记得在更改任何重要内容后清除缓存)。
以下是我在自定义 D7 模块中添加第三方软件包的方式:
- 生成一个 composer.json 文件,该文件以
vendor/
进行安装 - 需要
[modulename].module
vendor/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[] =
行是否有效 - 无论顺序如何,它都不起作用。