2016-09-21 103 views
0

我有一些執行CRUD,上傳和電子郵件的事件。我想排隊這些事件。我做了一些研究,發現我需要做的就是配置我的隊列驅動程序,並在我的事件偵聽器中實現ShouldQueue合同。由於我使用redis作爲緩存和會話驅動程序,因此我繼續使用redis作爲隊列驅動程序。當我在不使用ShouldQueue的情況下觸發我的事件時,一切正常,我收到電子郵件,數據被添加到DB ..等等。但是,當我將ShouldQueue添加到我的事件偵聽器並運行隊列時:listen我激活了我的事件,但沒有任何事情會在隊列中添加或執行。我也沒有收到任何電子郵件,DB ...等。我錯過了什麼?下面是我的代碼示例:Laravel 5.2排隊事件

.ENV文件

QUEUE_DRIVER=redis 

應用程序\活動\聯繫我們\ CustomerContactUs

use SerializesModels; 
/** 
* Create a new event instance. 
*/ 
public function __construct() 
{ 

} 

應用程序\監聽\ ContactedUs \ SendCustomerEmailToUs

private $mailer; 
private $request;  
public function __construct(Mailer $mailer, Request $request) 
{ 
    $this->mailer = $mailer; 
    $this->request = $request; 
} 
public function handle(CustomerContactedBullard $event) 
{ 
.... 
$this->mailer->send('public.emails.contact_us',$this->request->all(),$params); 
} 

聯繫我們控制器

event(new ContactedUs\CustomerContactedUs()); 

終端I運行

php artisan queue:listen 

謝謝

回答

0

你應該EventServiceProvider添加有效的輸入,像這樣:

protected $listen = [ 
    \App\Events\ContactUs\CustomerContactUs:class => [ 
     \App\Listeners\ContactedUs\SendCustomerEmailToUs::class, 
    ], 
]; 
+0

對不起忘了提,我也加入到EventServiceProvider這些類。我發現我的問題。我正在使用請求 - >進入我的聽衆。我必須通過事件構造函數傳遞表單數據。我現在遇到的問題是我的隊列無法訪問我的模型的全局範圍。當我查詢模型時,我有一個全局範圍集。隊列不訪問,所以我不能在我的查詢中不使用withoutGlobalScopes()的情況下進行查詢 – rafiaTech