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öra php artisan command:name (Var command: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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow