app/Customize/EventListener/EntityEventListener.php line 34

Open in your IDE?
  1. <?php
  2. namespace Customize\EventListener;
  3. use Customize\Entity\CustomerTrait;
  4. use Doctrine\Common\EventSubscriber;
  5. use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
  6. use Customize\Entity\ShippingTrait;
  7. use Customize\Entity\OrderTrait;
  8. class EntityEventListener implements EventSubscriber
  9. {
  10.     public function getSubscribedEvents()
  11.     {
  12.         return [
  13.             'loadClassMetadata',
  14.         ];
  15.     }
  16.     public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
  17.     {
  18.         $cm $eventArgs->getClassMetadata();
  19.         $class $cm->getName();
  20.         $uses class_uses($class);
  21.         $traits = [
  22.             CustomerTrait::class,
  23.             ShippingTrait::class,
  24.             OrderTrait::class,
  25.         ];
  26.         foreach ($traits as $trait) {
  27.             if (in_array($trait$uses) && property_exists($trait'column_extensions')) {
  28.                 $column_extensions $trait::$column_extensions;
  29.                 foreach ($column_extensions as $field => $extensions) {
  30.                     if (isset($cm->fieldMappings[$field])) {
  31.                         foreach ($extensions as $extension => $value) {
  32.                             // 型チェックを厳格にやるのは大変であること、ECCUBEのEntityのDBスキーマを上書きするのに
  33.                             // 利用するのみなので、システムの動作には影響しないことから、'phpstan-ignore-next-line'をつけている。
  34.                             // @phpstan-ignore-next-line
  35.                             $cm->fieldMappings[$field][$extension] = $value;
  36.                         }
  37.                     }
  38.                 }
  39.             }
  40.         }
  41.     }
  42. }