En el desarrollo del módulo Drupal 7, podría incluir un archivo personalizado de clase inc, api o php usando la directiva file [] = en el archivo module.info o la función drupal_load_included ().
Con D8 usando PSR, ¿cuál es la forma correcta de empaquetar un "objeto PHP simple" y hacer referencia a él DefaultController.php
? Pensar en algo así como: $a = new POPO();
.
¿Es namespace
suficiente darle al archivo PHP que contiene la clase suficiente? ¿Cómo sabe el controlador (o módulo en general) hacer referencia o escanear para esa clase?
Respuestas:
Ya no lo usas
file[] = ...
. En cambio, las clases se cargan automáticamente. Por ejemplo, tengo un módulo con la siguiente estructura de archivos:HybridFormatter.php
define una clase llamada HybridFormatter.En mi archivo .module, si empiezo a escribir mi IDE (NetBeans en este caso)
HybridFormatter
se completa\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::
automáticamente porque se carga automáticamente. Como no quiero que todo el camino ensucie mi módulo, en la parte superior coloqué la línea,junto con
use
directivas para otras clases que incluyo para usar con mi módulo.El espacio de nombres se define en HybridFormatter.php así:
fuente
include_once
orequire_once
ni nada. Hybridformatter.php define un espacio de nombres. Lo incluiré en la respuesta.Me gustaría agregar eso para incluir una clase personalizada que no se ajusta al D8 "plugin, controlador, formulario, etc." valores predeterminados, aún puede hacerlo como se indica aquí la descripción general de PSR-4
Para mi caso de uso, solté un "CustomClass.php" en / modules / custom / my_module / src / Al comienzo del archivo incluí la declaración del espacio de nombres
y en el archivo en el que quería usarlo (en este caso particular my_theme.theme) agregué
fuente