Laravelイベントevent

48479 ワード

概要
イベントは一般的な観察者モードの応用である.簡単に言えば...やる....これは...和乾...Laravelイベントでそれぞれ対応: (event)... (listener)... eventとlistenerファイルを配置する場所はそれぞれ:app/Events app/Listenersプロダクトマネージャにとって、イベントは主にあなたのビジネスロジックを規範化し、支線ロジックと主線ロジックを独立に分割するために使用されます.プログラマーにとって、イベントはControllerを非常に簡潔にし、デカップリングし、メンテナンスすることができます.
イベントの定義(Event)
Artisanコマンドでテンプレートをすばやく生成できます:php artisan event:generate
 
  
  1. php
  2. namespace App\Events;
  3. use App\Podcast;
  4. use App\Events\Event;
  5. use Illuminate\Queue\SerializesModels;
  6. class PodcastWasPurchased extends Event
  7. {
  8. use SerializesModels;
  9. public $podcast;
  10. /**
  11. * Create a new event instance.
  12. *
  13. * @param Podcast $podcast
  14. * @return void
  15. */
  16. public function __construct(Podcast $podcast)
  17. {
  18. $this->podcast = $podcast;
  19. }
  20. }

, , DTL(Data Transpotation Layer), , 。

(Listener and Handler)

artisan Event , Listner :

 
  
  1. php
  2. namespace App\Listeners;
  3. use App\Events\PodcastWasPurchased;
  4. use Illuminate\Queue\InteractsWithQueue;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. class EmailPurchaseConfirmation
  7. {
  8. /**
  9. * Create the event listener.
  10. *
  11. * @return void
  12. */
  13. public function __construct()
  14. {
  15. //
  16. }
  17. /**
  18. * Handle the event.
  19. *
  20. * @param PodcastWasPurchased $event
  21. * @return void
  22. */
  23. public function handle(PodcastWasPurchased $event)
  24. {
  25. // Access the podcast using $event->podcast...
  26. }
  27. }

handler , type-hint , 。

Event Listener

Service Provider: providers/EventServiceProvider.php  Listener:

 
  
  1. protected $listen = [
  2. 'App\Events\PodcastWasPurchased' => [
  3. 'App\Listeners\EmailPurchaseConfirmation',
  4. ],
  5. ];

, controller :

 
  
  1. php
  2. namespace App\Http\Controllers;
  3. use Event;
  4. use App\Podcast;
  5. use App\Events\PodcastWasPurchased;
  6. use App\Http\Controllers\Controller;
  7. class UserController extends Controller
  8. {
  9. /**
  10. * Show the profile for the given user.
  11. *
  12. * @param int $userId
  13. * @param int $podcastId
  14. * @return Response
  15. */
  16. public function purchasePodcast($userId, $podcastId)
  17. {
  18. $podcast = Podcast::findOrFail($podcastId);
  19. // Purchase podcast logic...
  20. Event::fire(new PodcastWasPurchased($podcast));
  21. }
  22. }

Event::fire(new PodcastWasPurchased($podcast)); , , listener(handler)。
Event::fire()

 
  
  1. event(new PodcastWasPurchased($podcast));

, , , 。

Listener :

 
  
  1. php
  2. namespace App\Listeners;
  3. use App\Events\PodcastWasPurchased;
  4. use Illuminate\Queue\InteractsWithQueue;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. class EmailPurchaseConfirmation implements ShouldQueue
  7. {
  8. //
  9. }

implements ShouldQueue 。

 
  
  1. php
  2. namespace App\Listeners;
  3. use App\Events\PodcastWasPurchased;
  4. use Illuminate\Queue\InteractsWithQueue;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. class EmailPurchaseConfirmation implements ShouldQueue
  7. {
  8. use InteractsWithQueue;
  9. public function handle(PodcastWasPurchased $event)
  10. {
  11. if (true) {
  12. $this->release(10);
  13. }
  14. }
  15. }

10 。

(Event Subscribers)

Event Subscribers Listener, listener hander(), (handler) , listner , listner 。

 
  
  1. php
  2. namespace App\Listeners;
  3. class UserEventListener
  4. {
  5. /**
  6. * Handle user login events.
  7. */
  8. public function onUserLogin($event) {}
  9. /**
  10. * Handle user logout events.
  11. */
  12. public function onUserLogout($event) {}
  13. /**
  14. * Register the listeners for the subscriber.
  15. *
  16. * @param Illuminate\Events\Dispatcher $events
  17. * @return array
  18. */
  19. public function subscribe($events)
  20. {
  21. $events->listen(
  22. 'App\Events\UserLoggedIn',
  23. 'App\Listeners\UserEventListener@onUserLogin'
  24. );
  25. $events->listen(
  26. 'App\Events\UserLoggedOut',
  27. 'App\Listeners\UserEventListener@onUserLogout'
  28. );
  29. }
  30. }

subscribe(), 。

Event Subscriber Service Provider

 
  
  1. php
  2. namespace App\Providers;
  3. use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
  4. use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
  5. class EventServiceProvider extends ServiceProvider
  6. {
  7. /**
  8. * The event listener mappings for the application.
  9. *
  10. * @var array
  11. */
  12. protected $listen = [
  13. //
  14. ];
  15. /**
  16. * The subscriber classes to register.
  17. *
  18. * @var array
  19. */
  20. protected $subscribe = [
  21. 'App\Listeners\UserEventListener',
  22. ];
  23. }

Event

Event , , 。
Event, $event->sendWelcomeMessage($user) , , ?

, 『 』,Fire 。 , , , , , ( ... ), 。

, , , , , , 。 $event->sendWelcomeMessage($user) hardcoding , sendWelcomeMessage 。

leader, , , , ( ) , 。

, Event , , 。

Event , 。