Ich habe eine Reihe von Konsolenbefehle in app/Console/Kernel.php registriert. Mein Kernel.php aussieht,Laravel benutzerdefinierte Konsole Befehl Aufruf Konstruktor aller anderen benutzerdefinierten Befehle
<?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\ConsoleCommand1::class,
Commands\ConsoleCommand2::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
*
* @return void
*/
protected function schedule(Schedule $schedule)
{
// Some code
}
}
Die Struktur der Konsole Befehlsklasse wie
<?php namespace App\Console\Commands;
use Illuminate\Console\Command;
use Dependancy;
class ConsoleCommand1 extends Command
{
protected $signature = ‘console_command_1’;
protected $description = ‘This is the description’;
private $dependancy;
public function __construct(Dependancy $dependancy)
{
parent::__construct();
$this->dependancy = $dependancy;
}
public function handle()
{
// Some code
}
}
Jetzt ist das Problem aussieht, ist, wenn ich eine der Konsolenbefehle aus der Liste ausführen, der Konstruktor der andere wird auch mit dem tatsächlich ausgeführten ausgeführt.
Zum Beispiel, wenn ich "php artisan console_command_1" ausführen, wird der Konstruktor von beiden "php artisan console_command_1" und "php artisan console_command_2" ausgeführt und umgekehrt. Ich möchte eigentlich nur den Konstruktor des 'tatsächlich ausgeführten Handwerkerbefehls' aufrufen.
Ist das der Weg Laravel Konsole Befehl entworfen oder mache ich etwas falsch? Jede Hilfe wird sehr geschätzt.
Wirklich interessante Sachen. Danke für die klare Antwort @Bogdan. –
Es ist lustig, dass die Dokumentation ein Beispiel mit einem Konstruktor zeigt, aber keine Warnung über seine Verwendung. Es scheint so, als ob die Signaturen im assoc-Array in den Kernel verschoben werden sollten. – jminkler
Also, wenn es 10 Konsolenbefehlsklassen gibt, wird Laravel weiterhin die Klassen erstellen? Denn in meinem Fall erhalte ich alle 10 Sekunden Protokolle von den Konstruktoren der Befehle. Komisch, dass ich es jetzt bemerkt habe. – Farveaz