현재 타사 PHP 라이브러리가 필요한 모듈을 개발 중입니다.이 라이브러리는 본질적으로 단일 PHP 클래스입니다. 일반적으로 include / 하위 디렉토리에 배치하고 추가합니다.
files[] = includes/Foo.php
내 .info 파일에 Drupal 7 클래스 자동 로더가 작동하도록하십시오. $foo = new Foo()
.
그러나이 모듈을 공개적으로 릴리스 할 권한이 있으며 모듈과 함께 라이브러리를 포함하지 않을 것입니다. 라이센싱과 관련된 합병증에 대해 잘 알고 있지만이 질문으로 인해 무시하고 싶습니다.
PHP 라이브러리를 어떻게 포함합니까? 와 비슷한 질문이 있습니다. 그러나 이것이 이것이 내 딜레마에 답한다고 생각하지는 않습니다.
이 질문에 대한이 답변은 기본적으로 사용하는 말 라이브러리 API를 ,하지만 난 그 사용이 단지 않는 발견하는 모든 단일 모듈 libraries_get_path()
다음 basepath를 얻을 수 (및 대체 경로가 포함되어 사용할 수없는 경우)하고하는 않는 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
}
}
이 경우 라이브러리 API는 실제로 아무것도하지 않습니다. 사용자에게 사본을 다운로드하여 모듈 폴더 자체에 배치하도록 요청하는 이전 방법에 비해 이것을 사용하면 이점이 없습니다. 그리고 모듈 개발자가 여전히 /로 로드 를 수동으로 수행 해야하는 문제가 여전히 있습니다. 예를 들어 Facebook 모듈은 라이브러리를 a에로드하고 HTML Purifier 모듈에는 라이브러리가 필요할 때마다 확인 및로드하는 내부 기능이 있습니다.include
require
hook_init
이것은 광범위한 연습 일지 모르지만 모범 사례 처럼 보이지는 않습니다 .
내 모듈이 주도권을 잡고 선언해야 hook_libraries_info
사용할 수 libraries_load('foo')
있습니까? 이것도 이상하게 보입니다.
if (libraries_load($name)) {..}
라이브러리가없는 경우 WSOD를 피하는 것입니다 .