2016-04-09 48 views
6

Ho bisogno di un codice dal mio controller per funzionare ogni dieci minuti. Abbastanza facile con Scheduler e Commands. Ma. Ho creato uno Command, registrato con Laravel Scheduler (in Kernel.php) e ora non riesco a creare un'istanza dello Controller. So che è un modo sbagliato per affrontare questo problema, ma ho solo bisogno di un test rapido. C'è un modo, badate a un modo hacky, per realizzare questo? Grazie.Laravel 5 - come eseguire un metodo di controllo da un comando Artisan?

Update # 1:

Il 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() metodo StatsController.php

public static function updateStats($theProfileName) { 
    // the body 
} 

Questo restituisce un FatalErrorException:

[Symfony\Component\Debug\Exception\FatalErrorException] 
syntax error, unexpected 'if' (T_IF) 

Aggiornamento # 2:

Risulta che ho avuto un errore di battitura nel metodo updateStats(), ma la risposta da @ alexey-mezenin funziona come un fascino! E 'anche abbastanza per importare il Controller nella Command:

use App\Http\Controllers\StatsController; 

E poi inizializzare come faresti normalmente:

public function handle() { 
    $statControl  = new StatsController; 
    $statControl->updateStats('<theProfileName>'); 
} 
+0

È possibile associare un percorso al metodo del controller e utilizzare [questo comando] (http://stackoverflow.com/questions/28866821/call-laravel-controller-via-command-line/28868350#28868350) per eseguire il percorso del percorso. – Bogdan

+0

Perché non farlo nel modo giusto sposta il codice che ti serve per uscire dal controller e chiamalo rispettivamente da un comando/controller. Molto più pulito di una soluzione hacky. – mstoppert

+0

Concordo pienamente, ma quando si incontrano le cose per la prima volta e si vuole solo imparare, si utilizzano inevitabilmente soluzioni hacky. Dopo aver imparato abbastanza, capisci i concetti, li rifatti. – iSS

risposta

5

tenta di utilizzare use Full\Path\To\Your\Controller; nel codice di comando e utilizzare il metodo statico:

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

Nel codice comando:

echo myClass::someStaticMethod(); 
+0

Spasibo. Ci ho provato, ma sfortunatamente, non ha funzionato. Questo è ciò che è stato restituito: '[Symfony \ Component \ Debug \ Exception \ FatalErrorException] errore di sintassi, imprevisto 'if' (T_IF)' – iSS

+0

Puoi mostrarmi il codice? –

+0

Si prega di vedere la modifica, grazie. – iSS