Comment mettre en place un script php au sein de symfony exécutable en ligne de commande
Vendredi 22 Septembre 2023 08:30

Comment mettre en place un script php au sein de symfony exécutable en ligne de commande

Personnellement, j’ai souvent de petits scripts à faire tourner en pleine nuit pour des opérations de maintenance. Et si ces scripts influencent directement l’une de mes apps symfony, je passe par des commandes customs.

Facile à mettre en place, on reste dans le même environnement,... bref les avantages sont nombreux.

Création d’une commande custom

Première chose à savoir, vos commandes se regroupent dans le dossier “src/Command”.

Je vais vous donner le fichier complet et vous expliquer les différentes parties importantes après.

writeln("Execution de la commande de test");
    
        if( false ){
            $output->writeln("Erreur d'execution");
    
            return Command::FAILURE;
        }
    
        if( false ){
            $output->writeln("Arguments invalide");
    
            return Command::INVALID;
        }
    
        return Command::SUCCESS;
    }
}

#[AsCommand()]

L’attribut AsCommand permet de définir qu’il s’agit bien d’une commande et mieux encore, comment l’appeler.

Plusieurs paramètres sont possible:

  • name: Nom de la commande qui sera utilisé dans la commande appelée
  • description: Petite description pouvant s’afficher dans le listing des commandes
  • hidden: Affiche ou non cette commande dans le listing
  • aliases: Permet plusieur nom pour une même commande

$output->writeln()

Pas forcément nécessaire si vous exécutez la commande via un cron… encore que vous souhaitez peut-être voir les logs de votre commande.

Toujours est-il que la fonction writeIn() permet de faire un affichage dans la console.

$output->writeln(‘Bonjour’);

Il est possible d’afficher plusieurs lignes en une fois en passant un tableau en paramètre.

$output->writeln([
        'Ligne 01',
        'Ligne 02',
        'Ligne 03',
    ]);

Exécution

La commande peut être facilement appelée via la commande suivante

php bin/console app:test

Console output