2017-06-18 92 views
0

有沒有人在Laravel Queue工作中使用過靜態變量?Laravel Queue Job中的靜態變量

我需要使用靜態變量來累積傳入的文件大小。

例如,如果總文件大小超過1000MB,我需要立即向遠程服務器發出請求。

[2017-06-18 07:59:44] local.ERROR: exception 'ErrorException' with message 'serialize(): "count" returned as member variable from __sleep() but does not exist' in C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Queue\Queue.php:89 
Stack trace: 
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'serialize(): "a...', 'C:\\xampp\\htdocs...', 89, Array) 

下面是我的隊列代碼。

<?php 

namespace App\Jobs; 

use App\Jobs\Job; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Log; 

class SendToAPI extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 
    private $data = null; 
    private static $count = 0; 
    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct($data) 
    { 
     $this->data = $data; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $count = $count + $this->data['file_size']; 
     if ($count > 1000) 
     { 
      // perform action 
     } 

    } 
} 
+0

「不工作」並不足以提供給我們幫助的信息。 – Joe

+0

對不起,先生,我讚揚我的帖子。 – user3201419

+0

'static'可能不會按預期工作,因爲隊列是異步的並可能在後續調用期間發生 –

回答

0

我複製這個問題,並得到了同樣的錯誤,然後搜索一下:https://laracasts.com/discuss/channels/laravel/using-static-variable-in-job-class

此線程的結論是靜態變量不序列化。

我建議您將總文件大小保存在Redis(或任何臨時存儲)本身中,而不是執行「$ count = $ count + $ this-> data ['file_size'];」在Redis中增加計數,然後檢查計數超出限制。

您還可以查看線程中討論的修復程序