Zoeken…
Een taak maken
U kunt een taak (console-opdracht) in Laravel maken met Artisan. Vanaf uw opdrachtregel:
php artisan make:console MyTaskName
Dit maakt het bestand in app / Console / Commands / MyTaskName.php . Het ziet er zo uit:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class MyTaskName extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
}
Enkele belangrijke delen van deze definitie zijn:
- De eigenschap
$signature
is wat uw opdracht identificeert. Je kunt dit commando later uitvoeren via de opdrachtregel met Artisan doorphp artisan command:name
(Wherecommand:name
overeen met de$signature
je commando) - De eigenschap
$description
is de hulp / het gebruik van Artisan naast uw opdracht wanneer deze beschikbaar wordt gesteld. - Met
handle()
methodehandle()
schrijft u de code voor uw opdracht.
Uiteindelijk wordt je taak via Artisan beschikbaar gesteld aan de opdrachtregel. De protected $signature = 'command:name';
eigendom van deze klasse is wat je zou gebruiken om het uit te voeren.
Een taak beschikbaar stellen
U kunt een taak beschikbaar stellen aan Artisan en aan uw toepassing in het app / Console / Kernel.php- bestand.
De Kernel
klasse bevat een array met de naam $commands
die uw opdrachten beschikbaar maakt voor uw toepassing.
Voeg uw commando toe aan deze array om het beschikbaar te maken voor Artisan en uw applicatie.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\Inspire::class,
Commands\MyTaskName::class // This line makes MyTaskName available
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
}
}
Zodra dit is gebeurd, hebt u nu toegang tot uw opdracht via de opdrachtregel, met behulp van Artisan. Ervan uitgaande dat uw opdracht de eigenschap $signature
heeft ingesteld op my:task
, kunt u de volgende opdracht uitvoeren om uw taak uit te voeren:
php artisan my:task
Uw taak plannen
Wanneer uw opdracht beschikbaar wordt gesteld aan uw toepassing, kunt u Laravel gebruiken om te plannen dat het op vooraf gedefinieerde intervallen wordt uitgevoerd, net zoals u een CRON zou doen.
In het app / Console / Kernel.php- bestand vindt u een schedule
die u kunt gebruiken om uw taak te plannen.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\Inspire::class,
Commands\MyTaskName::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('my:task')->everyMinute();
// $schedule->command('my:task')->everyFiveMinutes();
// $schedule->command('my:task')->daily();
// $schedule->command('my:task')->monthly();
// $schedule->command('my:task')->sundays();
}
}
Ervan uitgaande dat de $signature
uw taak my:task
kunt u deze plannen zoals hierboven wordt weergegeven, met behulp van het Schedule $schedule
. Laravel biedt tal van verschillende manieren om uw opdracht te plannen, zoals weergegeven in de opmerkingen zonder regels.
De planner instellen om uit te voeren
De planner kan worden uitgevoerd met de opdracht:
php artisan schedule:run
De planner moet elke minuut worden uitgevoerd om correct te werken. U kunt dit instellen door een cron-taak te maken met de volgende regel, die de planner elke minuut op de achtergrond uitvoert.
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1