Usando el oyente de eventos modelo en Laravel 5

Me gustaría asegurarme de que utilicé correctamente los oyentes de eventos modelo en Laravel 5 y no cometí ningún error (¿escucha versus controlador?). Mi solución funciona bien, pero me pregunto si desarrollé de acuerdo con el concepto y la convención de Laravel 5.

Objetivo: establecer siempre $ issue-> status_id en algún valor cuando el modelo se está guardando.

En la aplicación \ Providers \ EventServiceProvider.php

<?php namespace App\Providers; ... class EventServiceProvider extends ServiceProvider { ... public function boot(DispatcherContract $events) { parent::boot($events); Issue::saving('App\Handlers\Events\SetIssueStatus'); } } 

En la aplicación \ Handlers \ Events \ SetIssueStatus.php

 firstOrFail(); } else { $issueStatus = IssueStatus::where(somethingAnother)->firstOrFail(); } // issue_status() is One-to-One relations with IssueType (belongsTo) $issue->issue_status()->associate($issueStatus); } } 

Gracias por tu tiempo.

Como dijo que tiene una versión que funciona y es válida, ahora depende de usted averiguar si está bien para usted.

Solo para aclarar, no estoy diciendo que estas sean mejores soluciones, son solo una forma válida y diferente.

Como lo que está haciendo es específico para el modelo Issue o, al menos, no parece ser un evento genérico, puede configurarlo en su modelo directamente

 firstOrFail(); } else { $issueStatus = IssueStatus::where(somethingAnother)->firstOrFail(); } // issue_status() is One-to-One relations with IssueType (belongsTo) $issue->issue_status()->associate($issueStatus); }); } } 

pero si su evento es de hecho genérico y desea usarlo en múltiples modelos, podría lograr lo mismo. Solo necesita extraer el código del modelo y usar rasgos (como lo hace con las eliminaciones suaves)

Primero creamos nuestro rasgo (en este caso creamos en la raíz de nuestra aplicación) y extraemos el código, que escribí antes, del modelo:

 firstOrFail(); } else { $issueStatus = IssueStatus::where(somethingAnother)->firstOrFail(); } // issue_status() is One-to-One relations with IssueType (belongsTo) $model->issue_status()->associate($issueStatus); }); } } 

Ahora, en los modelos donde quiera usarlo, solo importa el rasgo y declara su uso:

  

Ahora esta última opción te mostré que es una opción genérica que tienes que puedes aplicar a cada modelo simplemente declarando que es uso en la parte superior de tu modelo.