Acabo de enterarme de los observadores modelo y me gustaría mover parte de mi lógica del controlador al observador. Esto es lo que tengo:
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(); } } El problema es acceder a la solicitud desde dentro del observador. No veo nada en los documentos. Encontré un hilo aquí que se refiere a esto y sugirió usar la función de ayuda de solicitud. request('site_id') pero estaba vacío.
Esto es tan simple que estoy un poco avergonzado de haberlo publicado. De todos modos, en caso de que alguien encuentre este hilo, aquí está la solución. En su observador, agregue un constructor que acepte la solicitud y establezca una propiedad.
protected $request; public function __construct(Request $request) { $this->request = $request; }Puede solicitar un objeto utilizando la función de ayuda de la aplicación de Laravel.
protected $request; public function __construct(WorkOrderNumber $workorder) { $this->request = app('request'); }obtener datos de solicitud en observador laravel
El ayudante de request () debería funcionar:
if (request()->has('password')) { $user->password = bcrypt(request()->password); }ref: https://www.codegrepper.com/code-examples/php/get+request+data+in+observer+laravel