我目前正在开发一个需要第三方PHP库的模块,该库本质上是一个PHP类。通常,我会将其放置在include /子目录中并添加
files[] = includes/Foo.php
到我的.info文件,并在我执行$foo = new Foo()
。时让Drupal 7类自动加载器完成它的工作 。
不过,我有权向公众发布此模块,而不希望将库与模块一起使用。我非常了解许可的复杂性,但是出于这个问题,我想忽略它。
还有一个类似的问题,如何包含PHP库?,但我真的不认为这可以解决我的难题。
这个回答这个问题本质上说,使用库API,但每一个模块,我已经发现,使用这只是做一个libraries_get_path()
得到基本路径(包括备用路径时,不可用),然后再执行require
或include
一些错误检查(或不检查)。都做类似的事情:
if (!class_exists('Foo')) {
$path = function_exists('libraries_get_path') ?
libraries_get_path('foo') : 'sites/all/libraries/foo';
if (!include($path . '/Foo.php')) {
// handle this error
}
}
在这种情况下,Libraries API实际上并没有做任何事情。与要求用户下载副本并将其放置在模块文件夹本身中的旧方法相比,我看不出使用此方法的优势。而且,仍然存在模块开发人员仍然需要使用/ 手动进行加载的问题。例如,Facebook模块只是将库加载到中,而HTML Purifier模块具有内部功能,可在每次需要该库时进行检查和加载。include
require
hook_init
这可能是一种普遍的做法,但似乎不是最佳做法。
我的模块应该主动声明一个a hook_libraries_info
以便我使用libraries_load('foo')
吗?这似乎也很奇怪。
if (libraries_load($name)) {..}
是避免在库不存在的情况下使用WSOD。