RegistersCustomConcerns.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace Maatwebsite\Excel;
  3. use Maatwebsite\Excel\Events\AfterSheet;
  4. use Maatwebsite\Excel\Events\BeforeExport;
  5. use Maatwebsite\Excel\Events\BeforeSheet;
  6. use Maatwebsite\Excel\Events\BeforeWriting;
  7. use Maatwebsite\Excel\Events\Event;
  8. trait RegistersCustomConcerns
  9. {
  10. /**
  11. * @var array
  12. */
  13. private static $eventMap = [
  14. BeforeWriting::class => Writer::class,
  15. BeforeExport::class => Writer::class,
  16. BeforeSheet::class => Sheet::class,
  17. AfterSheet::class => Sheet::class,
  18. ];
  19. /**
  20. * @param string $concern
  21. * @param callable $handler
  22. * @param string $event
  23. */
  24. public static function extend(string $concern, callable $handler, string $event = BeforeWriting::class)
  25. {
  26. /** @var HasEventBus $delegate */
  27. $delegate = static::$eventMap[$event] ?? BeforeWriting::class;
  28. $delegate::listen($event, function (Event $event) use ($concern, $handler) {
  29. if ($event->appliesToConcern($concern)) {
  30. $handler($event->getConcernable(), $event->getDelegate());
  31. }
  32. });
  33. }
  34. }