使用调度程序时,Laravel 5"类不存在"

Alu*_*ard 2 cron dependency-injection laravel-5

我试图第一次使用调度程序来调用方法:

protected function schedule(Schedule $schedule)
    {   
        $schedule->call('MyClassName@myMethodName')
            ->everyMinute();
    }
Run Code Online (Sandbox Code Playgroud)

我正在调用的类是以App/Http/Controller这种方式定义的:

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Models\Reaction;
use View;
use Request;

class MyClassNameController extends Controller {
Run Code Online (Sandbox Code Playgroud)

但是每次调度程序运行时,它都会:

  [ReflectionException]
  Class MyClassName does not exist
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

dee*_*our 8

您不应该以这种方式调用控制器方法.控制器方法用于处理HTTP请求.

myMethodName应将内容拉出到命令中.您可以在此处了解如何创建命令.

除此之外,你得到的原因ReflectionException是因为异常说明的确切原因:MyClassName不是有效的类.

$schedule->call('App\Http\Controllers\MyClassNameController@myMethodName')
Run Code Online (Sandbox Code Playgroud)

以上指定了您尝试引用的类的完全限定名称.您也可以在文件顶部导入该类并使用join

use App\Http\Controllers\MyClassNameController;

// ...

$schedule->call(join('@', [ MyClassNameController::class, 'myMethodName ]))
Run Code Online (Sandbox Code Playgroud)

但同样,你不应该这样调用控制器方法.