Laravel 5排队命令

时间:2015-04-22 17:14:34

标签: php laravel command queue laravel-5

我正在使用Laravel 5创建一个应用程序,目前我有一点问题(我希望)。 所以我编写了一个实现了ShouldBeQueued的Command:

class ImportDataCommand extends Command implements SelfHandling,ShouldBeQueued {


    use InteractsWithQueue, SerializesModels;

    public $filePath;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct($filePath)
    {
        $this->filePath = $filePath;
        Log::info('queued shit from command contructor and i have this destinationPath => '.$filePath);//working
        echo "contructor ".$this->filePath;

    }

    /**
     * Execute the command.
     *
     * @return void
     */
    public function handle()
    {


        $destinationPath = storage_path().'/app/gtfs/';


        $zip = new ZipArchive;
        echo "handle ".$this->filePath;
        /*$res = $zip->open($destinationPath.$this->filePath);
        if ($res === TRUE) {
            $zip->extractTo($destinationPath.'extracted/');
            $zip->close();
            echo 'done';

        } else {

            echo 'fail';

        }*/
    }

}

我这样称呼它:

$bus->dispatch(new ImportDataCommand($fileName));

我的问题是当队列进入队列后执行命令(顺便说一句,我使用beanstalkd)它会抛出异常,因为filePath没有设置,我想我已经理解了为什么会发生这种情况,当我使用我的变量将命令发送到busDispatcher上的队列时,该命令会被实例化,但是当在队列端调用handle()时,它不会发送该命令。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您在构造函数中指定$this->filePath,然后在handle()方法中覆盖它。

答案 1 :(得分:1)

最后我找到了兔子:我完全忘记了每次尝试冲洗所有工作,所以我不明白为什么但是它弄乱了命令(iIhave重新启动了Vagrant机器,但我不认为这会影响任何东西)。