繁体   English   中英

将请求实例传递给模型观察者,Laravel 5.4

[英]Pass request instance to Model Observer, Laravel 5.4

我刚刚了解了模型观察者,并希望将我的一些逻辑从控制器转移到观察者。 这是我所拥有的:

应用服务提供者.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')但它是空的。

这很简单,我发布它有点尴尬。 无论如何,如果有人找到这个帖子,这就是解决方案。 在您的观察者中,添加一个接受请求并设置属性的构造函数。

protected $request;

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

您可以使用Laravel的app helper功能请求对象。

protected $request;

public function __construct(WorkOrderNumber $workorder)
{
    $this->request = app('request');
}

在观察者 Laravel 中获取请求数据

request() 助手应该工作:

if (request()->has('password')) {
    $user->password = bcrypt(request()->password);
}

参考: https : //www.codegrepper.com/code-examples/php/get+request+data+in+observer+laravel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM