2016-04-09 8 views
6

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>'); 
} 
+0

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

+0

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

+0

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

Antwort

5

Try use Full\Path\To\Your\Controller; in Ihrem Befehlscode und die Verwendung Methode statisch zu verwenden:

public static function someStaticMethod() 
{ 
    return 'Hello'; 
} 

In Ihrem Befehlscode:

echo myClass::someStaticMethod(); 
+0

Spasibo. Ich habe es versucht, aber leider hat es nicht funktioniert. Dies wurde zurückgegeben: '[Symfony \ Component \ Debug \ Exception \ FatalErrorException] Syntaxfehler, unerwartet 'if' (T_IF)' – iSS

+0

Kannst du mir den Code zeigen? –

+0

Bitte beachten Sie die Bearbeitung, danke. – iSS