Bir modüle özel sınıf dosyasını nasıl ekleyebilirim?


10

Drupal 7 modülü geliştirmede, module.info dosyasındaki [] = yönergesini veya drupal_load_included () işlevini kullanarak özel bir inc, api veya php sınıfı dosyası ekleyebilirim.

PSR kullanan D8 ile, bir "düz ole PHP nesnesi" paketlemenin ve ona başvurmanın doğru yolu DefaultController.phpnedir? Gibi bir şey düşünün: $a = new POPO();.

Sadece sınıfı içeren PHP dosyasını vermek namespaceyeterli midir? Denetleyici (veya genel olarak modül) bu sınıfa başvurmayı veya taramayı nasıl bilir?


Bu bağlantı Drupal 8.x modülleri oluşturmak yardımcı olabilir
Krishna Mohan

Evet, drupal.org/node/2087879 adresini okudum ancak [] = yönergesini göremedikten sonra maalesef bu dosya ekleme sorusuna cevap vermedi.
Rick

Yanıtlar:


11

Artık kullanmıyorsun file[] = .... Bunun yerine, sınıflar otomatik olarak yüklenir. Örneğin, aşağıdaki dosya yapısına sahip bir modül var:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • Eklenti/
        • Alan/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php HybridFormatter adlı bir sınıfı tanımlar.

.Module dosyamda, IDE (bu durumda NetBeans) yazmaya başlarsam, otomatik yüklendiği HybridFormatteriçin otomatik olarak tamamlanır \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::. Tüm yolu modülüme batırmak istemediğim için en üstte hattı yerleştirdim,

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

modülümle birlikte usekullanacağım diğer sınıflar için yönergelerle birlikte .

Ad alanı HybridFormatter.php dosyasında şu şekilde tanımlanır:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

Tamamen anladığımdan emin olmak için HybridFormatter.php otomatik olarak yüklenecek ... otomatik olarak? İnclude_once () işlevine gerek yok mu? HybridFormatter.php'de tanımlanmış bir ad alanı var mı?
Rick

Gerek yoktur include_onceya require_onceya da bir şey. Hybridformatter.php bir ad alanı tanımlar. Cevaba ekleyeceğim.
beth

@beth Bana yardım edebilir misin? drupal.stackexchange.com/questions/233565/…
RobinSon

9

Bunu D8 "eklentisine, denetleyicisine, formuna vb." Uymayan özel bir sınıf eklemek için eklemek istiyorum. Varsayılan olarak, yine de PSR-4'e genel bakışta belirtildiği gibi yapabilirsiniz

Kullanım durumum için, / modules / custom / my_module / src / dizinine bir "CustomClass.php" dosyası bıraktım. Dosyanın başına ad alanı bildirimini ekledim

namespace Drupal\my_module;

ve dosyada kullanmak istedim (bu özel durumda my_theme.theme) ekledim

use Drupal\my_module\CustomClass;
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.