php - 将请求实例传递给 Model Observer,Laravel 5.4

标签 php laravel eloquent

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

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') 但它是空的。

最佳答案

这太简单了,我有点不好意思发布了它。无论如何,万一有人找到这个线程,这里是解决方案。在您的观察者中,添加一个接受请求并设置属性的构造函数。

protected $request;

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

关于php - 将请求实例传递给 Model Observer,Laravel 5.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723085/

相关文章:

jquery - 当使用 Bootstrap 且 Laravel jquery 未找到时

laravel - Laravel:更改基本URL?

many-to-many - Eloquent ORM/Laravel - 使用自定义数据透视表结构

php - 关于 PHP 中的 `array_reduce` 和匿名函数的问题

php - SQL SELECT 选择与查询不匹配的行

php - 创建表时默认 Laravel 4 "string"有多长以及如何覆盖默认值?

php - Laravel 5.4 Eloquent 查询

database - Vue.js 和 Laravel 一次调用更新多行

javascript - 如何将 jQuery ng-repeat {{x.something}} 传递给 javascript api url,如/api/get_now/{{x.something}}

php - 组合框未更新