Drupal sınıfların otomatik yüklenmesini nasıl ele alıyor?


10

Drupal, modüller aracılığıyla sınıfların otomatik yüklenmesini nasıl ele alıyor? Örneğin, bir Olaylar modülüm varsa ve Olay adlı bir sınıf bildirir ve sonra .info dosyasında sınıf dosyasını dahil, bu nasıl kaydedilir?

Sorun dinamik olarak tüm yüklü sınıf isimlerini içeren bir dizi almaya çalışıyorum. get_declared_classes () bu şekilde bildirilen tüm sınıflarımın isimlerini döndürmez, bu yüzden bir şekilde otomatik olarak yüklendiklerini varsayıyorum. Başka bir yığın taşması sorusunun önerilerini takiben hepsini spl_autoload_functions () ile almayı denedim , ancak bu da başarısız oldu.

Herhangi bir fikir?

Yanıtlar:


13

Modüller yeniden oluşturulduğunda .info dosyalarında listelenen tüm dosyalar ayrıştırılır (Performans nedeniyle yalnızca bu listedeki değiştirilmiş / yeni dosyalar).

Bu bilgiler daha sonra {registry}ve {registry_files}tablolarında saklanır . Bu nedenle, tüm sınıfları veya belirli bir adlandırma düzenine göre olanları almak istiyorsanız, bu tabloları sorgulayabilirsiniz.


7

Drupal bir kod kayıt defteri tutar ve sınıfları otomatik yükleyicisi için kullanır. Bu kayıt defterini modülünüzün sınıflarıyla doldurmak için, dosyalarını .info dosyasındaki files [] girişine eklemelisiniz:

files[] = includes/Foo.inc
files[] = includes/Bar.inc

PHP'nin sınıf otomatik yüklemesi, üst sınıf dosyasının da yüklendiğinden emin olur.

Bu cevap için pier-buyle kullanıcısına teşekkür edin, aynı soru için orijinal cevabına bakın .

umarım yardımcı olur



3

.İnfo dosyasının files [] dizisine bir giriş eklediyseniz, modül yönetimi bölümüne gitmeniz ve "yapılandırmayı kaydet" i tıklamanız gerekir. Bu, .info bilgilerini yenilemek için drupal alacak ve yeni girişler kaydedilecektir.


1

Ben modülü çalıştırmaya başladığımda bilgi dosyasında dahil dosyaları bildirmek onları tanınmıyor bulduk. Event.inc dosyasında bir sınıf olayı varsa. ancak modüldeki bir nesneyi sandık olarak tanımıyor. Çizgiyi ekliyorum

include_once ('CMatArticleHandler.inc');

$ değişkeninden önce = new event (); hat. Ben bu konuda yeniyim o zaman bundan daha fazla olabilir, ama şimdiye kadar çalıştı.


1
İnsanların bunu yapmaktan kaçınmak için ne yapılacağını açıklamak yerine, sadece bunu aldatmaları gerçekten talihsiz. Aynı durumdayım: Drupal'ın otomatik yükleyicisi sürekli olarak bir sınıf almak için bir dosya yükleme ihtiyacını tanımıyor.
20'de greggles

Yeni sınıflar eklerken kayıt defterini temizlemeniz gerekir. Bunu drush ile yapmanın kolay bir yolu bu komutla: drupal.org/project/registry_rebuild
stefgosselin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.