CLI PHP - Développement des commandes avec Symfony/Console

Symfony console

La première chose à faire est d'installer le composant symfony/console avec composer:

composer require symfony/console

cette commande génère les fichiers suivant :

composer.json
composer.lock
et le répertoire vendor qui contient les autoloader et le code source de symfony/console et ces dépendances

Création de la commande console :
A la racine de notre projet on vacréer un fichier exécutable (avec les droit 755) appelé console :

#!/usr/bin/env php
<?php
require __DIR__.'/vendor/autoload.php';
$application = new Symfony\Component\Console\Application;
$application->add(new Latrach\Command\AddUserCommand );
$application->run();

Pour utiliser notre commande qu'on va développer "MyCommand" on doit l'ajouter dans console:

$application->add(new Latrach\Command\AddUserCommand );

Notre classe AddUserCommand on va la placer dans src/Command, mais on doit renseigner le répertoire "src" dans le fichier composer.json pour l'autolad psr-4:

    "autoload": {
        "psr-4": {
            "Latrach\": "src/"
        }
    }

Lancer la commande suivante pour régénérer les autoloader:

composer dump-autoload

le code source de la classe AddUserCommand:

<?php
/*
 * fichier src/Command/AddUserCommand.php
 */

namespace Latrach\Command;

use

Symfony\Component\Console\Command\Command;
use
Symfony\Component\Console\Input\InputArgument;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Output\OutputInterface;
use
Symfony\Component\Console\Question\Question;

class

AddUserCommand extends Command {

 

/**
   * In this method setup command, description and its parameters
   */
 
protected function configure() {
   
$this->setName('db:add-user');
   
$this->setDescription('insertion d\'un utilsateur dans ma table user.');
   
$this->addArgument('code-user', InputArgument::REQUIRED, 'le code utilsateur à inserer dans ma table');
   
$this->setHelp('le code utilsateur à inserer dans ma table');
   
$this->setAliases(['au']);
  }

 

/**
   * Here all logic happens
   */
 
protected function execute(InputInterface $input, OutputInterface $output) {
   
/*
     */
   
$code_user = $input->getArgument('code-user');
    if (empty(
$s) || empty($t) || empty($u) || empty($up) || empty($fs) || empty($ft)) {
     
$output->writeln('<error>Merci de renseigner les variables dans le fichier .env</error>');
      return
1;
    }
   
//demande à l'utilsateur de rentrer le mot de passe
    //pour se connecter à la base de donnée
   
$helper = $this->getHelper('question');
   
$question = new Question("Mod de passe de l'utilsateur dbuser:");
   
$question->setHidden(true);
   
$question->setHiddenFallback(false);
   
$password = $helper->ask($input, $output, $question);
   
//connextion à la base mysql et mise à jour de la table users  
   
$cmd = sprintf('mysql -u dbuser --password=%s --execute="insert into db.user (code_user) values (%s);"', $password, $code_user);
   
$output->writeln(shell_exec($cmd));
   
$output->writeln('<info>utilsateur inséré!!</info>');
    return
0; // 0 = success, other values = fail
 
}

}

?>

Utilsation:

php console db:add-user said_latrach

ou avec l 'alias au:

php console au said_latrach

Tags: 

Catégories: 

Share/Save