Sök…
Skapa en uppgift
Du kan skapa en uppgift (Console Command) i Laravel med hjälp av Artisan. Från din kommandorad:
php artisan make:console MyTaskName
Detta skapar filen i app / Console / Commands / MyTaskName.php . Det kommer att se ut så här:
<?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()
{
//
}
}
Några viktiga delar av denna definition är:
- Egenskapen
$signature
är det som identifierar ditt kommando. Du kommer att kunna köra detta kommando senare via kommandoraden med hjälp av Artisan genom att köraphp artisan command:name
(Varcommand:name
matchar kommandot$signature
) - Egenskapen
$description
är Artisans hjälp / användning visas bredvid ditt kommando när den görs tillgänglig. - Metoden
handle()
är där du skriver koden för ditt kommando.
Så småningom kommer din uppgift att göras tillgänglig för kommandoraden via Artisan. Den protected $signature = 'command:name';
Egenskapen i den här klassen är vad du skulle använda för att köra den.
Att göra en uppgift tillgänglig
Du kan göra en uppgift tillgänglig för Artisan och för din applikation i appen / Console / Kernel.php- filen.
Klassen Kernel
innehåller en matris med namnet $commands
som gör dina kommandon tillgängliga för din applikation.
Lägg till ditt kommando i den här matrisen för att göra det tillgängligt för Artisan och din applikation.
<?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)
{
}
}
När detta är gjort kan du nu komma åt ditt kommando via kommandoraden med hjälp av Artisan. Antagande att ditt kommando har egenskapen $signature
inställd på my:task
, kan du köra följande kommando för att utföra din uppgift:
php artisan my:task
Schemalägga din uppgift
När ditt kommando görs tillgängligt för din applikation kan du använda Laravel för att schemalägga det för att köras med fördefinierade intervall, precis som du skulle göra en CRON.
I appen / Console / Kernel.php- filen hittar du en schedule
som du kan använda för att schemalägga din uppgift.
<?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();
}
}
Förutsatt att din uppgifts $signature
är my:task
du schemalägga den som visas ovan med hjälp av Schedule $schedule
. Laravel erbjuder massor av olika sätt att schemalägga ditt kommando, som visas i de kommenterade raderna ovan.
Ställer in schemaläggaren för att köras
Schemaläggaren kan köras med kommandot:
php artisan schedule:run
Schemaläggaren måste köras varje minut för att fungera korrekt. Du kan ställa in det här genom att skapa ett cron-jobb med följande rad som kör schemaläggaren varje minut i bakgrunden.
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1