Şu anda temelde tek bir PHP sınıfı olan bir üçüncü taraf PHP kütüphanesi gerektiren bir modül üzerinde çalışıyorum. Normalde, bunu bir include / alt dizinine yerleştirir ve
files[] = includes/Foo.php
.info dosyama ve Drupal 7 sınıfı otomatik yükleyicinin bir şeyi yaptığımda yapmasına izin verin $foo = new Foo()
.
Yine de, bu modülü halka yayınlama iznim var ve modülün bulunduğu kütüphaneyi içermez. Lisanslama ile ilgili komplikasyonların farkındayım, ancak bu soru uğruna bunu göz ardı etmek istiyorum.
Benzer bir soru var, nasıl bir PHP kütüphanesi eklerim? , ama bunun benim dilime cevap verdiğini sanmıyorum.
Bu sorunun cevabı esas olarak Kütüphaneler API'sini kullandığını söyler , ancak bunu kullanan bulduğum her bir modül sadece libraries_get_path()
taban yolunu almak için (ve kullanılabilir olmadığında geri dönüş yolunu içerir) ve sonra bir require
veya include
bazılarıyla hata denetimi (veya değil). Hepsi şöyle bir şey yapar:
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
}
}
Bu durumda, Kütüphaneler API'sı gerçekten hiçbir şey yapmaz. Kullanıcıların bir kopyasını indirmelerini ve modül klasörünün içine yerleştirmelerini istemenin eski yönteminde bunu kullanmanın avantajını görmüyorum. Modül geliştiricisinin hala / ile yükü manuel olarak yapması gereken bir sorun var . Örneğin, Facebook modülü kütüphaneyi a'ya yükler ve HTML Arıtma modülünün her kütüphaneye ihtiyaç duyulduğunda kontrol etmek ve yüklemek için dahili bir işlevi vardır.include
require
hook_init
Bu yaygın bir uygulama olabilir, ancak en iyi uygulama gibi görünmüyor .
Modülüm inisiyatif almalı ve hook_libraries_info
kullanabilmem için bir ilan etmeli libraries_load('foo')
mi? Bu da tuhaf görünüyor.
if (libraries_load($name)) {..}
kütüphanenin mevcut olmaması durumunda WSOD'den kaçınmaktır.