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:
- 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
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!