Génération de fichiers dynamiques
Introduction
Le système de commandes d'Elementum permet de générer des fichiers dynamiquement en fonction du contexte d'exécution. Ce guide explique comment créer une commande qui génère des fichiers dans la structure de votre projet.
Prérequis
- Une commande de base configurée (voir Créer une commande)
- Le trait
FileGeneratord'Elementum
Mise en place
1. Ajout du trait FileGenerator
Pour commencer, ajoutez le trait FileGenerator à votre commande :
use Elementum\Commands\Traits\FileGenerator; class MyCommand extends Command { use FileGenerator; // ... }
2. Configuration des arguments
Définissez les arguments nécessaires dans la méthode configure() :
protected function configure() { $this ->setDescription('Crée un nouveau contrôleur') ->addArgument('name', InputArgument::REQUIRED, 'Nom du contrôleur (ex: HomeController)') ->addArgument('where', InputArgument::OPTIONAL, 'Emplacement (ex: themes/theme-name)'); }
3. Implémentation de la logique
Dans la méthode execute(), utilisez useGenerator pour préparer la génération :
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $location = $input->getArgument('where'); [$path, $className, $namespace] = $this->useGenerator( $name, $location, $output, 'Controller' // Suffixe pour le namespace ); // ... }
4. Définition du contenu
Créez une méthode content() pour générer le contenu du fichier :
protected function content(array $args): string { extract($args); return <<<PHP <?php namespace $namespace; use Elementum\Abstract\Controller; use Symfony\Component\HttpFoundation\Request; class $className extends Controller { public function index(Request \$request) { echo "Hello World - {$className}_controller"; } } PHP; }
Dans l'heredoc, il est possible d'utiliser les variables $namespace, $className et $path pour générer le contenu du fichier.
Finalisez la méthode execute() pour générer le fichier :
protected function execute(InputInterface $input, OutputInterface $output): int { // ... (code précédent) $content = $this->content([ 'namespace' => $namespace, 'className' => $className, ]); $this->createFile($path, $content); $output->writeln("<info>Contrôleur créé : $className</info>"); $output->writeln("<comment>Emplacement : $path</comment>"); return Command::SUCCESS; }
Utilisation
Exécutez la commande avec les arguments requis :
# Dans le dossier de votre thème php dobby mon:commande MonControleur themes/mon-theme
Variables disponibles
Dans la méthode content(), vous avez accès à :
$namespace: L'espace de noms calculé$className: Le nom de la classe générée$path: Le chemin complet du fichier à créer