Débuter - informations de référence (Drupal 8)
Drupal 8 utilise un certain nombre de fonctionnalités avancées du langage PHP et des bibliothèques tierces complexes pour fournir aux développeurs externes l'API la plus avancée de tous les CMS disponibles. Bien que les développeurs expérimentés de Drupal 7 puissent remarquer certains changements importants, la majeure partie de la structure de base restera familière.
Si certains des matériaux présentés dans le guide étape par étape pour développeurs de modules D8 vous sont nouveaux, le contenu ci-dessous peut vous aider. Cependant, une connaissance exhaustive n'est pas requise pour passer à la description du module D8.
Programmation orientée objet
La POO, bien qu'initialement intimidante, est maintenant bien reconnue comme la meilleure approche.
Pour un aperçu général des bonnes pratiques PHP, consultez phptherightway.com. Drupal n’utilise pas tous les outils et méthodes documentés là-bas, mais c’est une excellente introduction à PHP et à de nombreuses fonctionnalités du langage.
Actualisez vos connaissances en POO en lisant la documentation officielle PHP sur les classes et objets, ainsi que certains des bons tutoriels suivants :
- PHP POO en plein effet
- Programmation orientée objet (sur Wikipédia)
- PHP orienté objet pour débutants (sur tuts+)
- Concepts orientés objet (sur tutorialspoint.com)
- Programmation orientée objet en PHP (sur phpro.org)
- Programmation orientée objet en PHP (sur youtube.com)
- Fondations de la programmation : conception orientée objet (sur lynda.com)
- 12 concepts POO PHP indispensables à connaître
- Parcours POO sur SymfonyCasts (anciennement KNP university)
Drupal 8 utilise également certains patrons de conception courants, et vous voudrez vous assurer d’avoir une compréhension générale de ceux-ci :
Patron de fabrique et liaison statique tardive
Patrons de conception logicielle (sur Wikipédia)
Fondations de la programmation : patrons de conception (sur lynda.com)
@todo : ajouter des liens supplémentaires vers la documentation des patrons que nous utilisons ...
Espaces de noms PHP
Si vous n’êtes pas familier avec le concept d’espace de noms en PHP, essayez certains des articles suivants :
- Comment utiliser les espaces de noms PHP.
- PHP : espaces de noms
- Vidéo sur les espaces de noms PHP.
- Explication des espaces de noms PHP (par Dayle Rees)
- Espaces de noms en PHP (sur tuts+)
Dans la plupart des cas, le code Drupal utilise un espace de noms basé sur le module auquel il appartient.
Exemple : espace de noms pour block.module
namespace Drupal\block;
@todo : expliquer pourquoi parfois c’est Drupal\, parfois Drupal\\[Controller|Form|Plugin|etc.] et comment savoir lequel utiliser...
Pour en savoir plus, consultez les standards d’espace de noms Drupal. Plus d’informations sur l’utilisation de PSR-4 dans Drupal ici. Un logiciel de codage bien configuré devrait reconnaître les espaces de noms PHP et fournir de l’aide et de l’auto-complétion.
Injection de dépendances
Bien que l’injection de dépendances soit en fait un autre patron de conception OOP, nous le mentionnons ici car Drupal 8 utilise intensivement ce concept, et il est important d’avoir une compréhension de base pour accéder et utiliser beaucoup d’API principales.
Lisez sur l’injection de dépendances en PHP, ainsi que d’autres articles liés sur cette page. En particulier cet article, car Drupal utilise intensivement le conteneur de services Symfony auquel il fait référence.
Voir aussi :
Symfony
Symfony est un framework PHP dont Drupal s’est inspiré pour réduire la duplication de code dans différents projets PHP. Une grande partie du code que Drupal 8 utilise pour gérer le routage, les sessions et le conteneur de services, entre autres, est empruntée à Symfony 2 (et au fur et à mesure du développement de Drupal 8, migrée vers Symfony 3). Pour en savoir plus sur les raisons de ce choix, consultez cette présentation du principal contributeur alexpott.
Consultez le livre sur Symfony 2 et rafraîchissez vos connaissances Symfony. Bien que tout ne soit pas nécessaire pour comprendre Drupal, savoir comment Symfony fonctionne fera de vous un meilleur développeur Drupal et PHP. Vous pourriez aussi être intéressé par le glossaire Symfony.
Vérifiez core/composer.lock pour voir les bibliothèques Symfony. Depuis Drupal 8.6.15, il s'agit des bibliothèques PHP Symfony et connexes :
...
"symfony/class-loader": "~3.4.0",
"symfony/console": "~3.4.0",
"symfony/dependency-injection": "~3.4.26",
"symfony/event-dispatcher": "~3.4.0",
"symfony/http-foundation": "~3.4.26",
"symfony/http-kernel": "~3.4.14",
"symfony/routing": "~3.4.0",
"symfony/serializer": "~3.4.0",
"symfony/translation": "~3.4.0",
"symfony/validator": "~3.4.0",
"symfony/process": "~3.4.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/yaml": "~3.4.5",
"twig/twig": "^1.38.2",
"doctrine/common": "^2.5",
"doctrine/annotations": "^1.2",
...
Annotations
Drupal 8 utilise les annotations PHP — des commentaires @docblock ajoutés dans votre code avec une syntaxe spéciale — pour découvrir les plugins et fournir un contexte/métadonnées supplémentaires au code exécutable. Les annotations sont lues en utilisant le parseur d’annotations Doctrine (v.1.6.), puis transformées en informations que Drupal peut utiliser pour mieux comprendre ce que fait votre code.
En savoir plus sur l’utilisation des annotations pour la découverte de plugins.
Voir la liste de tous les différents types d’annotations dans Drupal 8.
Voir aussi : PHPDoc (sur Wikipédia)
Plugins
Les plugins fournissent des fonctionnalités modulaires pouvant être facilement remplacées par un autre plugin. Les plugins fournissant une fonctionnalité similaire appartiennent au même type. Par exemple, un « Widget de champ » est un type de plugin, et chaque widget de champ individuel (texte, zone de texte, date, etc.) est implémenté via un plugin.
En savoir plus sur l’API des plugins dans Drupal 8.
Services
Dans Drupal 8, un service est tout objet géré par le conteneur de services. Le concept de services a été introduit pour séparer les fonctionnalités réutilisables et rendre ces services connectables et remplaçables, en les enregistrant dans le conteneur de services d’injection de dépendances avec lequel ils sont étroitement liés.
Voir aussi : Conteneur de services pour Drupal Geeks
Autres ressources
Voici une liste de ressources supplémentaires pour vous aider à vous familiariser avec Drupal 8.