Catégorie 04SKILLS

SOLID PHP Skill

SOLID, design patterns et architecture propre en PHP/Drupal

Installation
Skill Claude — Globalmkdir -p ~/.claude/skills/solid-php
SKL
À propos

Skill Claude pour appliquer les principes SOLID et les design patterns PHP dans un contexte Drupal. Couvre Dependency Injection, Repository pattern, Service layer, Event Subscriber, Plugin system, et les conventions architecturales qui rendent le code Drupal testable, extensible et maintenable.

Commandes
CommandeDescription
drush generate serviceGénérer un service Drupal avec injection de dépendances
drush generate event-subscriberGénérer un event subscriber (hooks modernes)
drush generate pluginGénérer un plugin Drupal (Block, Formatter, etc.)
vendor/bin/phpstan analyse --level=8 web/modules/customAnalyser la qualité du code (type hints, SOLID)
Exemples
Refactorer un hook en service + event subscriberCODE
"Refactore ce code existant dans MODULE.module :

function mon_module_user_login(\$account) {
  // 50 lignes de logique : log, send email, update field, call API
}

Crée :
1. UserLoginService avec les méthodes logLogin(), sendWelcomeEmail(), updateLastLogin()
2. UserLoginSubscriber qui écoute UserEvents::LOGIN et délègue au service
3. monmodule.services.yml avec la définition et les dépendances
4. Tests unitaires pour UserLoginService avec mocks"
Implémenter le Repository Pattern pour les ArticlesCODE
"Crée un ArticleRepositoryInterface + ArticleRepository pour Drupal qui :
- findById(int \$nid): ?NodeInterface
- findPublishedByCategory(string \$category, int \$limit = 10): array
- findByDateRange(\DateTimeInterface \$start, \DateTimeInterface \$end): array
- save(NodeInterface \$node): void
Utiliser EntityTypeManager + EntityQuery en interne (jamais en dehors du repo)
Enregistrer le service dans services.yml avec l'interface comme alias"