Artisan命令给出了错误'类Closure的对象无法转换为字符串'

时间:2017-07-19 08:29:50

标签: php laravel artisan

我想在Mac上的Laravel中使用Schedule。这是我的crod文件:

SHELL=/bin/bash PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin * * * * * php /Applications/MAMP/htdocs/xxxy/xxyyy/artisan schedule:run >> $run >> /dev/null 2>&1

这是Kernel.php

namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
protected $commands = [
     //Commands\Inspire::class,
];

protected function schedule(Schedule $schedule)
{   
    $schedule->command(function () {
        dispatch(new \App\Jobs\sendPush);
    })->everyMinute();        
}
}

我用工匠在终端输入的任何内容都会出现此错误:

  

[ErrorException]类Closure的对象无法转换为字符串

你知道如何让工匠工作吗?

sendPush.php

class sendPush extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
public function __construct()
{
    //
}
public function handle(MessageController $MessageController)
{
    $MessageController->sendDefault();
}

1 个答案:

答案 0 :(得分:1)

我之前从未使用过这些,但快速浏览docs似乎突出了您的问题:

  

您可以在App \ Console \ Kernel类的schedule方法中定义所有计划任务。首先,让我们看一个安排任务的示例。在这个例子中,我们将安排每天午夜调用一个Closure。在Closure中,我们将执行数据库查询以清除表:

  

除了安排Closure调用之外,您还可以安排Artisan命令和操作系统命令。例如,您可以使用命令方法使用命令的名称或类来安排Artisan命令:

似乎不是使用command方法,而是在传递call而不是命令名称或类时使用Closure方法。

所以我相信你只需要将代码更新到下面:

protected function schedule(Schedule $schedule) {   
    $schedule->call(function () {
        dispatch(new \App\Jobs\sendPush);
    })->everyMinute();        
}