我需要从 Controller 中获取一些代码才能每十分钟运行一次。使用SchedulerCommands很容易。但。我创建了一个Command,并在Laravel Scheduler中注册了它(在Kernel.php中),现在我无法实例化Controller。我知道这是解决此问题的错误方法,但我只需要进行快速测试。请注意,您有没有办法做到这一点?谢谢你。

更新#1:
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()中的StatsController.php方法
public static function updateStats($theProfileName) {
   // the body
}

这将返回一个FatalErrorException:
[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected 'if' (T_IF)

更新2:

原来我在updateStats()方法中有一个错字,但是@ alexey-mezenin的答案却像一个魅力!将Controller导入Command也足够了:
use App\Http\Controllers\StatsController;

然后像平常一样初始化它:
public function handle() {
   $statControl        = new StatsController;
   $statControl->updateStats('<theProfileName>');
}

最佳答案

尝试在命令代码中使用use Full\Path\To\Your\Controller;并静态使用方法:

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

在您的命令代码中:
echo myClass::someStaticMethod();

10-08 05:29
查看更多