Costruire un Comando Artisan per Laravel 5

0
583

Artisan – Creare un Comando Personalizzato

Sicuramente conoscerai bene Artisan: quante volte lo hai usato per creare Controller, Model, Migration etc? È un eseguibile molto potente e allo stesso tempo molto facile da estendere con comandi personalizzati. Hai capito bene: puoi creare un comando per qualsiasi cosa ti venga in mente, anche la più strana!

In questo articolo andremo a costruire un comando create-user che ci permetterà di creare velocemente un utente per la nostra applicazione.

Il nostro fine ultimo sarà quello di realizzare questo comando:

php artisan create-user user@example.com 1234pass –admin –nome=Christian –cognome=Giupponi

Prima di iniziare è bene sapere che tutti i comandi custom vengono salvati all’interno della cartella app/Console/Commands e, come per la maggior parte delle classi in Laravel, la loro creazione è facilitata da un comando Artisan.

Primo Step – Creazione e Registrazione del Comando

Per prima cosa è necessario creare la classe. Puoi sfruttare lo stesso Artisan usando il comando:

php artisan make:command CreateUser

dove CreateUser è il nome da assegnare alla classe. Come anticipato, il nuovo file sarà salvato in app/Console/Commands.

A questo punto è necessario “registrare” il nuovo comando in modo che il sistema possa riconoscerlo e metterlo a disposizione tra i comandi Artisan.

Per registrare il comando è sufficente modificare il file Kernel.php che trovi in app/Console aggiungendo all’array $commands il tuo nuovo comando:

protected $commands = [
‘appConsoleCommandsInspire’,
‘appConsoleCommandsCreateUser’
];

Fatto questo possiamo procedere con la creazione vera e propria del comando.

Secondo Step – Implementazione del Comando

La prima cosa da fare è quella di dare un nome e una descrizione al comando in modo che sia ben riconoscibile nell’elenco dei comandi Artisan.

Compila quindi i campi $name e $description in questo modo:

/**
* The console command name.
*
* @var string
*/
protected $name = ‘create-user’;

/**
* The console command description.
*
* @var string
*/
protected $description = ‘Crea un utente.’;

Oltre ai campi appena visti troverai 3 metodi molto importanti:

  • fire
  • getArguments
  • getOptions

Il primo è il metodo che viene richiamato quando viene lanciato un comando, il secondo si occupa di recuperare eventuali argomenti mentre il terzo legge le opzioni, spesso identificate dal doppio trattino: --create.

In questo esempio faremo in modo che il comando richieda 2 argomenti:

  • Email
  • Password

entrambi obbligatori per creare il nostro utente, e faremo in modo che accetti anche alcuni parametri opzionali che saranno:

  • Nome
  • Cognome
  • Admin

ovvero saremo in grado di scegliere, oltre al nome e cognome, se l’utente che stiamo creando dovrà essere un amministratore oppure no.

Nota: Solitamente le opzioni servono per variare il comportamento di un comando, in questo caso forziamo un po’ la mano per il loro utilizzo in modo da vedere come funzionano.

Iniziamo ad impostare gli arogmenti obbligatori:

protected function getArguments()
{
return [
[
‘email’,
InputArgument::REQUIRED,
‘L’indirizzo email dell’utente.’
],
[
‘password’,
InputArgument::REQUIRED,
‘La password dell’utente.’
],
];
}

e i campi opzionali:

protected function getOptions()
{
return [
[
‘admin’,
null,
InputOption::VALUE_OPTIONAL,
‘Indica se l’utente dovrà essere un admin.’,
null
],
[
‘nome’,
null,
InputOption::VALUE_OPTIONAL,
‘Indica il nome dell’utente da creare.’,
null
],
[
‘cognome’,
null,
InputOption::VALUE_OPTIONAL,
‘Indica il cognome dell’utente da creare.’,
null
],
];
}

Arriviamo adesso al cuore della nostra classe, il metodo fire:

public function fire()
{
// Recuperiamo gli argomenti obbligatori
$email = $this->argument( ‘email’ );
$password = $this->argument( ‘password’ );

// Recuperiamo le option
$admin = $this->option(‘admin’);
$nome = $this->option(‘nome’);
$cognome = $this->option(‘cognome’);

// Creiamo un nuovo utente
$user = new User;
$user->email = $email;
$user->password = $password;

//Controlliamo se è impostata l’option admin
if( $admin )
{
$user->role = 1;
}

if( $nome )
{
$user->first_name = $nome;
}

if( $cognome )
{
$user->last_name = $cognome;
}

//Salviamo l’utente
$user->save();

//Mandiamo un messaggio alla console
$this->info(‘Utente creato con successo.’);
}

Nell’esempio precedente fingiamo che ci sia una tabella user che abbia i campi:

  • first_name
  • last_name
  • role
  • password
  • email

Una volta terminato il metodo apri il terminale e digita:

php artisan

per recuperare l’elenco dei comandi disponibili e, quasi in cima, dovresti trovare il tuo nuovo comando:

Available commands:
create-user Crea un utente.

Se tutto è andato a buon fine potrai usare il tuo nuovo comando:

php artisan create-user user@example.com 1234pass –admin –nome=Christian –cognome=Giupponi

Buon lavoro!