- php artisan list - Muestra lista de los comandos disponibles
Para crear un custom command haces:
php artisan make:command SendEmails
El comando creado tiene las siguientes caracteristicas.
class nombreDe Command extends Command
{
//Signature para mostrar en php artisan list
protected $signature = 'mi:command {argument1} {argumentOpcional?} {argumentOpcionalcondefautl=hola} {--opcionTrueFalse} {--opcionConValor=default}' ;
//Descripcion para el user
protected $description = 'Send drip e-mails to a user';
//Constructor del command
public function __construct(DripEmailer $drip)
{
parent::__construct();
$this->drip = $drip;
}
//La funcion que se ejecuta
public function handle()
{
$this->drip->send(User::find($this->argument('user')));
}
}
Los inputs se definen en el signature
protected $signature = 'mi:command {argument1} {argumentOpcional?} {argumentOpcionalcondefautl=hola} {--opcionTrueFalse} {--opcionConValor=default}' ;
Los Arguments Van despues del comando, pueden ser
Requeridos: - {argument1}
Opcionales: {argumentOpcional?}
Opcionales con default: {argumentOpcionalcondefautl=hola}
Las Opciones van despues del argument
Booleana: {--opcionTrueFalse}
con valor: {--opcionConValor=default}
Para leer las opciones y argumentos colocados haces:
Y los lees asi:
public function handle()
{
//leo mi argumento
$userId = $this->argument('miArgumento');
//Leo todos los argumentos como array
$arguments = $this->arguments();
//Leo mi opcion
$queueName = $this->option('miOpcion');
//Leo todas las opciones como array
$options = $this->options();
}
Podes expectear que te coloquen N datos y obtenerlos como un array.
email:send {user*}
Entonces el usuario puede colocar N parametros foo bar
php artisan email:send foo bar
y obtenes en tu funcion la variable $user con el valor
['foo', 'bar']
:
Tambien podria ser una opcion con N valores
email:send {user} {--id=*}
//El usuario coloca
php artisan email:send --id=1 --id=2
Podes documentar tus opciones asi.
email:send {user : Mi descripcion}
- Podes pedirle un input al usuario asi
public function handle()
{
$name = $this->ask('What is your name?');
}
- Si necesitas que la opcion sea secreta (no se muestre en la pantalla, como una pass)
$password = $this->secret('What is the password?');
- Si necesitas pedir confirmacion
if ($this->confirm('Do you wish to continue?')) {
//
}
- Si necesitas Multiple choice
$name = $this->choice('What is your name?',
['Taylor', 'Dayle'], $defaultIndex);
Podes outputear diferentes respuestas con los colores correspondientes asi:
$this->info('Display this on the screen');
$this->line('Display this on the screen');
$this->comment('Display this on the screen');
$this->question('Display this on the screen');
$this->error('Display this on the screen');
Podes hacer una tabla asi
$headers = ['Name', 'Email'];
$users = App\User::all(['name', 'email'])->toArray();
$this->table($headers, $users);
//Declaras la cantidad de pasos de la barra
$bar = $this->output->createProgressBar(count($users));
//Inicio de renderizacion de la barra
$bar->start();
foreach ($users as $user) {
$this->performTask($user);
//La barra avanza un paso
$bar->advance();
}
//La barra termina
$bar->finish();
En cualquier parte de tu aplicacion podes llamar un comando de artisan asi, notese como indicas las opciones y argumentos
$exitCode = Artisan::call('email:send', [
'miargumento' => 1, '--miopcion' => 'default'
]);
Artisan::queue('email:send', [
'miargumento' => 1, '--miopcion' => 'default'
]);
Dentro de un artisan command podes llamar un comando asi:
public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
}
Tambien podes llamarlo pero silenciar su output
$this->callSilent('email:send', [
'user' => 1, '--queue' => 'default'
]);