¿Cómo incluyo un archivo de clase personalizado en un módulo?

10

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 namespacesuficiente 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?

Almiar
fuente
Este enlace Crear módulos Drupal 8.x puede ser útil
Krishna Mohan
Sí, leí drupal.org/node/2087879 pero al no ver el archivo [] = directiva, desafortunadamente no respondió a esta pregunta específica de inclusión de archivos.
Rick

Respuestas:

11

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:

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

HybridFormatter.php define una clase llamada HybridFormatter.

En mi archivo .module, si empiezo a escribir mi IDE (NetBeans en este caso) HybridFormatterse 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,

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

junto con usedirectivas para otras clases que incluyo para usar con mi módulo.

El espacio de nombres se define en HybridFormatter.php así:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }
beth
fuente
Entonces, para asegurarme de que entiendo completamente, HybridFormatter.php se cargará automáticamente ... ¿automáticamente? No hay necesidad de un include_once ()? ¿HybridFormatter.php tiene un espacio de nombres definido?
Rick
No hay ninguna necesidad de include_onceo require_onceni nada. Hybridformatter.php define un espacio de nombres. Lo incluiré en la respuesta.
beth
@beth ¿Puedes ayudarme? drupal.stackexchange.com/questions/233565/…
RobinSon
9

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

namespace Drupal\my_module;

y en el archivo en el que quería usarlo (en este caso particular my_theme.theme) agregué

use Drupal\my_module\CustomClass;
ben.hamelin
fuente