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?
Respostas:
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:HybridFormatter.php
define uma classe chamada HybridFormatter.No meu arquivo .module, se eu começar a digitar no meu IDE (NetBeans neste caso),
HybridFormatter
ele 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,juntamente com
use
diretrizes para outras classes que estou incluindo para uso com meu módulo.O espaço para nome é definido no HybridFormatter.php da seguinte forma:
fonte
include_once
ourequire_once
ou qualquer coisa. Hybridformatter.php define um espaço para nome. Vou incluir na resposta.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
e no arquivo em que eu queria usá-lo (neste caso específico, my_theme.theme), adicionei
fonte