Comment inclure un fichier de classe personnalisé dans un module?


10

Dans le développement du module Drupal 7, je pourrais inclure un fichier de classe inc, api ou php personnalisé en utilisant la directive file [] = dans le fichier module.info ou la fonction drupal_load_included ().

Avec D8 utilisant PSR, quelle est la bonne façon d'empaqueter un "objet PHP simple ole" et de le référencer DefaultController.php? Pensez quelque chose comme: $a = new POPO();.

Donner simplement le fichier PHP contenant la classe est-il namespacesuffisant? Comment le contrôleur (ou le module en général) sait-il comment référencer ou rechercher cette classe?


Ce lien Créer des modules Drupal 8.x pourrait être utile
Krishna Mohan

Oui, j'ai lu à travers drupal.org/node/2087879 mais en ne voyant pas la directive file [] =, il n'a malheureusement pas répondu à cette question spécifique de l'inclusion de fichiers.
Rick

Réponses:


11

Vous n'utilisez file[] = ...plus. Au lieu de cela, les classes sont chargées automatiquement. Par exemple, j'ai un module avec la structure de fichiers suivante:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • Brancher/
        • Champ/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php définit une classe appelée HybridFormatter.

Dans mon fichier .module, si je commence à taper mon IDE (NetBeans dans ce cas), HybridFormatteril se termine automatiquement \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::car il est chargé automatiquement. Puisque je ne veux pas que tout le chemin jonche mon module, en haut j'ai placé la ligne,

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

ainsi que des usedirectives pour d'autres classes que j'inclus pour une utilisation avec mon module.

L'espace de noms est défini dans HybridFormatter.php comme ceci:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

Donc, pour m'assurer de bien comprendre, HybridFormatter.php sera automatiquement chargé ... automatiquement? Il n'y a pas besoin d'un include_once ()? Est-ce que HybridFormatter.php a un espace de noms défini?
Rick

Il n'y a pas besoin include_onceou require_onceou quoi que ce soit. Hybridformatter.php définit un espace de noms. Je vais inclure dans la réponse.
beth


9

Je voudrais ajouter cela pour inclure une classe personnalisée qui ne rentre pas dans le plugin D8, le contrôleur, le formulaire, etc. par défaut, vous pouvez toujours le faire comme indiqué sur l' aperçu du PSR-4 ici

Pour mon cas d'utilisation, j'ai déposé un "CustomClass.php" dans / modules / custom / my_module / src / Au début du fichier, j'ai inclus la déclaration d'espace de noms

namespace Drupal\my_module;

et dans le fichier dans lequel je voulais l'utiliser (dans ce cas particulier my_theme.theme) j'ai ajouté

use Drupal\my_module\CustomClass;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.