Aller au contenu principal
Version: 26.0.8.0

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 FileGenerator d'Elementum

Mise en place

1. Ajout du trait FileGenerator

Pour commencer, ajoutez le trait FileGenerator à votre commande :

app/Commands/MyCommand.php
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() :

app/Commands/MyCommand.php
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 :

app/Commands/MyCommand.php
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 :

app/Commands/MyCommand.php
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;
}
astuce

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 :

app/Commands/MyCommand.php
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