Ich benötige Code von meinem Controller, um alle zehn Minuten zu laufen. Einfach genug mit Scheduler
und Commands
. Aber. Ich habe eine Command
erstellt, registriert mit Laravel Scheduler
(in Kernel.php
) und jetzt kann ich nicht die Controller
instanziieren. Ich weiß, es ist ein falscher Weg, um dieses Problem anzugehen, aber ich brauchte nur einen schnellen Test. Gibt es eine Möglichkeit, dich auf einen hacky Weg zu stellen, um das zu erreichen? Vielen Dank.Laravel 5 - Wie starte ich eine Controller-Methode von einem Artisan Command?
Update # 1:
Die Command
:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Http\Controllers\StatsController;
class UpdateProfiles extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'update-profiles';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Updates profiles in database.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
StatsController::updateStats('<theProfileName>');
}
}
updateStats()
Methode in StatsController.php
public static function updateStats($theProfileName) {
// the body
}
Das gibt ein FatalErrorException
:
[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected 'if' (T_IF)
Update # 2:
Es stellt sich heraus, dass ich einen Fehler im Verfahren updateStats()
habe, aber die Antwort von @ alexey-mezenin wirkt wie ein Zauber! Es ist auch genug, um die Controller
in die Command
zu importieren:
use App\Http\Controllers\StatsController;
Und dann initialisieren, wie Sie es normalerweise tun würde:
public function handle() {
$statControl = new StatsController;
$statControl->updateStats('<theProfileName>');
}
Sie könnten eine Route zu der Controller-Methode zuordnen und [diesen Befehl] verwenden (http://stackoverflow.com/questions/28866821/call-laravel-controller-via-command-line/28868350#28868350), um die Routenpfad – Bogdan
Warum nicht die richtige Art und Weise bewegen Sie den Code, den Sie brauchen, um aus dem Controller zu laufen und rufen Sie es von einem Befehl/Controller jeweils. Viel sauberer als eine hacky Lösung. – mstoppert
stimme ich voll und ganz zu, aber wenn Sie das Zeug zum ersten Mal begegnen und nur lernen wollen, verwenden Sie unweigerlich Hacky-Lösungen. Nachdem Sie genug gelernt haben, verstehen Sie die Konzepte, Sie refaktorisieren es. – iSS