Come posso includere un file di classe personalizzato in un modulo?


10

Nello sviluppo del modulo Drupal 7, potrei includere un file di classe inc, api o php personalizzato usando la direttiva file [] = nel file module.info o la funzione drupal_load_included ().

Con D8 che utilizza PSR, qual è il modo corretto di impacchettare un "oggetto PHP ole semplice" e fare riferimento in esso DefaultController.php? Pensate a qualcosa di simile a: $a = new POPO();.

È sufficiente dare il file PHP contenente la classe namespace? In che modo il controller (o il modulo in generale) sa fare riferimento o cercare quella classe?


Questo link Creare moduli Drupal 8.x potrebbe essere utile
Krishna Mohan,

Sì, ho letto drupal.org/node/2087879 ma non vedendo la direttiva file [] =, sfortunatamente non ha risposto a questa domanda specifica sull'inclusione dei file.
Rick,

Risposte:


11

Non usi file[] = ...più. Invece, le classi vengono caricate automaticamente. Ad esempio, ho un modulo con la seguente struttura di file:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • Collegare/
        • Campo/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php definisce una classe chiamata HybridFormatter.

Nel mio file .module, se comincio a digitare il mio IDE (NetBeans in questo caso) HybridFormattersi completa automaticamente \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::perché è caricato automaticamente. Dal momento che non voglio che l'intero percorso sia disseminato del mio modulo, in cima ho posizionato la linea,

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

insieme alle usedirettive per altre classi che includo per l'uso con il mio modulo.

Lo spazio dei nomi è definito in HybridFormatter.php in questo modo:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

Quindi, per essere sicuro di aver compreso appieno, HybridFormatter.php verrà caricato automaticamente ... automaticamente? Non è necessario un include_once ()? HybridFormatter.php ha uno spazio dei nomi definito?
Rick,

Non v'è alcuna necessità di include_onceo require_onceo niente. Hybridformatter.php definisce uno spazio dei nomi. Includerò nella risposta.
Bet


9

Vorrei aggiungerlo per includere una classe personalizzata che non rientra nel D8 "plugin, controller, modulo, ecc." per impostazione predefinita, è ancora possibile farlo come indicato nella panoramica PSR-4 qui

Per il mio caso d'uso, ho lasciato cadere un "CustomClass.php" in / modules / custom / my_module / src / All'inizio del file ho incluso la dichiarazione dello spazio dei nomi

namespace Drupal\my_module;

e nel file in cui volevo utilizzarlo (in questo caso, my_theme.theme) ho aggiunto

use Drupal\my_module\CustomClass;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.