Saat ini saya sedang mengerjakan modul yang membutuhkan perpustakaan PHP pihak ketiga, yang pada dasarnya adalah satu kelas PHP. Biasanya, saya akan meletakkannya di direktori include / dan tambahkan
files[] = includes/Foo.php
ke file .info saya dan membiarkan kelas auto Drupal 7 loader melakukan hal tersebut ketika saya melakukan $foo = new Foo()
.
Saya memiliki izin, untuk melepaskan modul ini ke publik dan lebih suka tidak menyertakan perpustakaan dengan modul. Saya sadar betul tentang kerumitan perizinan, tetapi demi pertanyaan ini, saya ingin mengabaikannya.
Ada pertanyaan serupa, Bagaimana cara saya menyertakan perpustakaan PHP? , tapi saya tidak benar-benar berpikir ini menjawab dilema saya.
Ini menjawab pertanyaan ini pada dasarnya mengatakan untuk menggunakan API Perpustakaan , tetapi setiap modul tunggal yang saya temukan yang menggunakan ini hanya melakukan libraries_get_path()
untuk mendapatkan basepath (dan termasuk jalur mundur ketika tidak tersedia) dan kemudian melakukan require
atau include
dengan beberapa pemeriksaan kesalahan (atau tidak). Semua melakukan sesuatu seperti:
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
}
}
Dalam hal ini, API Perpustakaan tidak benar-benar melakukan apa pun. Saya tidak melihat keuntungan menggunakan ini, dibandingkan metode lama meminta pengguna mengunduh salinan dan meletakkannya di folder modul itu sendiri. Dan, masih ada masalah bahwa pengembang modul masih perlu melakukan beban secara manual dengan include
/ require
. Sebagai contoh, modul Facebook hanya memuat perpustakaan di a hook_init
dan modul HTML Purifier memiliki fungsi internal untuk memeriksa dan memuat setiap kali perpustakaan diperlukan.
Ini mungkin praktik yang luas , tetapi sepertinya bukan praktik terbaik .
Haruskah modul saya mengambil inisiatif dan mendeklarasikan hook_libraries_info
agar saya dapat menggunakan libraries_load('foo')
? Ini juga aneh.
if (libraries_load($name)) {..}
adalah untuk menghindari WSOD jika perpustakaan tidak ada.