Eccoci di nuovo con le nostre super guide laravel! Oggi parliamo di Artisan, andiamo a vedere nel dettaglio Artisan Commands.
Iniziamo col dire che tranne i comandi base già presenti tramite artisan, Laravel ci dà la possibilità di estendere la nostra applicazione per mezzo della creazione di comandi custom, dunque per svolgere compiti da noi definiti. Questi comandi saranno poi accessibili sempre grazie ad artisan 🙂
Artisan Commands
Esempio: creeremo un comando artisan per generare dati tramite le nostre model factories.
Dopo aver creato un modello User e uno Post, insieme alle migrations, creiamo due factories nel
seguente modo
<?php // database/factories/UserFactory.php use Faker\Generator as Faker; $factory->define(App\User::class, function (Faker $faker) { return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => bcrypt('secret'), 'remember_token' => str_random(10), ]; }); <?php //database/factories/PostFactory.php use Faker\Generator as Faker; $factory->define(App\Post::class, function (Faker $faker) { return [ 'title' => $faker->sentence, 'preview' => $faker->paragraph(2), 'body' => $faker->paragraph(34), 'user_id' => function () { return factory(App\User::class)->create()->id; } ]; });
Creiamo adesso il nostro comando
php artisan make:command PopulateDB // app/Console/Commands/PopulateDB.php
Dentro il file creato, facciamo attenzione a due proprietà
$signature e $description (sono i due dati che verranno stampati nel listato di comandi artisan).
Il primo definisce il modo in cui il comando verrà invocato, il secondo è una breve descrizione
class PopulateDB extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'blog:populate'; /** * The console command description. * * @var string */ protected $description = 'Create fake users and posts'; [...] }
Per poter essere riconosciuti da artisan, i nostri comandi custom devono essere registrati in app/Console/Kernel.php, nell’array $commands
protected $commands = [ \App\Console\Commands\PopulateDB::class ];
Proviamo a listare i comandi artisan
php artisan
e vedremo quello appena creato da noi
blog blog: populate Create fake users and posts
Piano d’azione: vogliamo ricevere il numero di utenti fake da creare, se creare posts o meno per questi utenti e se sì, quanti.
In questo modo il nostro comando comando dovrebbe essere invocato nel seguente modo
php artisan blog:populate 5 --posts=10
Dobbiamo dunque modificare la signature del nostro comando
protected $signature = 'blog:populate {users} {--posts=0}';
{users} – in questo modo vengono definiti gli argomenti di un comando. Per definire un argomento opzionale gli si appende un ‘?’ alla fine {users?}
Questi argomenti sono accessibili tramite $this->argument(‘users’)
{–posts=0} – in questo modo vengono definiti le opzioni di un comando. Questo input è opzionale e spesso gli viene associato un valore di default
Alla fine possiamo implementare la nostra funzione di seeding
public function handle() { $this->line('creating users ' . $this->argument('users')); $this->line('creating posts ' . $this->option('posts')); $users = factory(\App\User::class, intval($this->argument('users')))->create(); if ($this->option('posts')) { foreach ($users as $user) { $this->line("Creating {$this->option('posts')} for user {$user->name}"); $posts = factory(\App\Post::class, intval($this->option('posts')))->create(['user_id' => $user->id]); foreach ($posts as $post) { $this->line("Created post: {$post->title}"); } } } }
Se la guida ti è piaciuta e se pensi che possa essere opportuno per te procedere nello studio approfondito di Laravel, condividi sul tuo profilo Facebook questa guida e richiedi maggiori informazioni a amministrazione@laramind.com