php - metodos - Laravel 5: ¿cómo ejecutar un método de controlador desde un comando de artesano?
crear controlador laravel con metodos (1)
Necesito un código de mi Controlador para ejecutar cada diez minutos. Lo suficientemente fácil con el Scheduler
y los Commands
. Pero. Kernel.php
un Command
, lo Kernel.php
con Laravel Scheduler
(en Kernel.php
) y ahora no puedo crear instancias del Controller
. Sé que es una forma incorrecta de abordar este problema, pero solo necesitaba una prueba rápida. ¿Hay alguna manera, para ser un poco hacky, de lograr esto? Gracias.
Actualización # 1:
El 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()
en StatsController.php
public static function updateStats($theProfileName) {
// the body
}
Esto devuelve una FatalErrorException
:
[Symfony/Component/Debug/Exception/FatalErrorException]
syntax error, unexpected ''if'' (T_IF)
Actualización # 2:
Resulta que he tenido un error tipográfico en el método updateStats()
, ¡pero la respuesta de @ alexey-mezenin funciona como un encanto! También es suficiente importar el Controller
al Command
:
use App/Http/Controllers/StatsController;
Y luego inicialízalo como lo harías normalmente:
public function handle() {
$statControl = new StatsController;
$statControl->updateStats(''<theProfileName>'');
}
Intente usar use Full/Path/To/Your/Controller;
en tu código de comando y usa el método estáticamente:
public static function someStaticMethod()
{
return ''Hello'';
}
En tu código de comando:
echo myClass::someStaticMethod();