2015-05-26 8 views
6

Ho un pacchetto che contiene comandi Artisan. Ho registrato questi comandi con Artisan tramite il mio fornitore di servizi in questo modo:Come programmare i comandi Artisan in un pacchetto?

/** 
* Register the application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    // Register Amazon Artisan commands 
    $this->commands([ 
     'App\Marketplace\Amazon\Console\PostProductData', 
     'App\Marketplace\Amazon\Console\PostProductImages', 
     'App\Marketplace\Amazon\Console\PostProductInventory', 
     'App\Marketplace\Amazon\Console\PostProductPricing', 
    ]); 
} 

Tuttavia, questi comandi devono essere programmato per eseguire tutti i giorni.

so in app/Console/Kernel.php c'è il metodo schedule() dove è possibile registrare i comandi e la loro frequenza, ma come posso programmare i comandi nel provider di servizi di mio pacchetto, invece?

+0

Perché non è possibile programmarli nel kernel? – MECU

+0

@MECU Poiché sono in un pacchetto e non nell'applicazione Laravel stessa. –

+0

hai mai risolto questo? Sto affrontando lo stesso problema ora me stesso. – sgrover

risposta

17

Ci sono voluti un sacco di debug e leggendo la fonte di Laravel per capirlo, ma si è rivelato piuttosto semplice. Il trucco è attendere fino a dopo l'avvio dell'applicazione per programmare i comandi, poiché è in quel momento che Laravel definisce l'istanza Schedule e quindi pianifica i comandi internamente. Spero che questo salvi alcune ore di doloroso debugging!

use Illuminate\Support\ServiceProvider; 
use Illuminate\Console\Scheduling\Schedule; 

class ScheduleServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     $this->app->booted(function() { 
      $schedule = $this->app->make(Schedule::class); 
      $schedule->command('some:command')->everyMinute(); 
     }); 
    } 

    public function register() 
    { 
    } 
} 
+4

Fantastico. Grande scoperta! –

+0

Grazie! Funziona alla grande – boksiora

+0

Funziona cooooool, grazie –

Problemi correlati