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

Vendredi 22 Septembre 2023

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

Discuter d'un projet ← Retour au blog