Como faço para incluir um arquivo de classe personalizado em um módulo?

10

No desenvolvimento do módulo Drupal 7, eu poderia incluir um arquivo de classe personalizado inc, api ou php usando a diretiva file [] = no arquivo module.info ou a função drupal_load_included ().

Com o D8 usando PSR, qual é a maneira correta de empacotar um "objeto PHP simples" e referenciá-lo DefaultController.php? Pense algo como: $a = new POPO();.

Apenas basta fornecer o arquivo PHP que contém a classe namespace? Como o controlador (ou módulo em geral) sabe fazer referência ou procurar essa classe?

Rick
fonte
Este link Criar módulos Drupal 8.x pode ser útil
Krishna Mohan
Sim, eu li drupal.org/node/2087879, mas ao não ver a diretiva file [] =, infelizmente ela não respondeu a essa questão específica de inclusão de arquivos.
Rick Rick

Respostas:

11

Você não usa file[] = ...mais. Em vez disso, as classes são carregadas automaticamente. Por exemplo, eu tenho um módulo com a seguinte estrutura de arquivos:

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

HybridFormatter.php define uma classe chamada HybridFormatter.

No meu arquivo .module, se eu começar a digitar no meu IDE (NetBeans neste caso), HybridFormatterele será preenchido automaticamente \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::porque é carregado automaticamente . Como não quero esse caminho inteiro espalhando meu módulo, no topo coloquei a linha,

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

juntamente com usediretrizes para outras classes que estou incluindo para uso com meu módulo.

O espaço para nome é definido no HybridFormatter.php da seguinte forma:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }
beth
fonte
Então, para garantir que eu entenda completamente, o HybridFormatter.php será carregado automaticamente ... automaticamente? Não há necessidade de um include_once ()? HybridFormatter.php tem um espaço para nome definido?
Rick
Não há necessidade de include_onceou require_onceou qualquer coisa. Hybridformatter.php define um espaço para nome. Vou incluir na resposta.
beth
@beth Você pode me ajudar? drupal.stackexchange.com/questions/233565/...
Robinson
9

Eu gostaria de adicionar isso para incluir uma classe personalizada que não se encaixa no D8 "plug-in, controlador, formulário etc." padrões, você ainda pode fazê-lo conforme observado na visão geral do PSR-4 aqui

Para meu caso de uso, soltei um "CustomClass.php" em / modules / custom / my_module / src / No início do arquivo, incluí a declaração do namespace

namespace Drupal\my_module;

e no arquivo em que eu queria usá-lo (neste caso específico, my_theme.theme), adicionei

use Drupal\my_module\CustomClass;
ben.hamelin
fonte