2017-05-01 34 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; 
}