2017-05-01 31 views
1

我剛剛瞭解了模型觀察者,並且想將我的一些邏輯從控制器移到觀察者。下面是我有:將請求實例傳遞給Model Observer,Laravel 5.4

AppServiceProvider.php

public function boot() 
{ 
    WorkOrder::observe(WorkOrderObserver::class); 
} 

WorkOrderObserver.php

namespace App\Observers; 

use App\Site; 
use App\WorkOrder; 
use Carbon\Carbon; 
use App\WorkOrderNumber; 

class WorkOrderObserver 
{ 

    public function creating(WorkOrder $workOrder) 
    { 
     $branchOfficeId = Site::findOrFail($request->site_id)->branch_office_id; 
     $today = Carbon::today('America/Los_Angeles'); 
     $todaysWorkOrderCount = WorkOrder::where('created_at_pst', '>=', $today)->count(); 

     $workOrder->work_order_number = (new WorkOrderNumber) 
      ->createWorkOrderNumber($branchOfficeId, $todaysWorkOrderCount); 
     $workOrder->completed_by = null; 
     $workOrder->status_id = 1; 
     $workOrder->work_order_billing_status_id = 1; 
     $workOrder->created_at_pst = Carbon::now()->timezone('America/Los_Angeles') 
      ->toDateTimeString(); 
    } 

} 

問題是訪問來自觀察者內的請求。我沒有看到文檔中的任何內容。我在這裏發現了一個引用這個的線程,並且它建議使用請求幫助函數。我試過request('site_id'),但它是空的。

+0

您是否嘗試過\照亮\ Http \ Request $請求參數?我認爲它會被自動注入。 –

+0

我嘗試過,但有一個錯誤...'TypeError:傳遞給App \ Observers \ WorkOrderObserver :: creating()的參數2必須是Illuminate \ Http \ Request的實例,沒有給出' –

回答

2

這很簡單我有點尷尬,我發佈了它。無論如何,如果有人發現這個線程,這裏的解決方案。在觀察者中,添加一個接受請求並設置屬性的構造函數。

protected $request; 

public function __construct(Request $request) 
{ 
    $this->request = $request; 
}