<?php
namespace Customize\EventListener;
use Customize\Entity\CustomerTrait;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Customize\Entity\ShippingTrait;
use Customize\Entity\OrderTrait;
class EntityEventListener implements EventSubscriber
{
public function getSubscribedEvents()
{
return [
'loadClassMetadata',
];
}
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
{
$cm = $eventArgs->getClassMetadata();
$class = $cm->getName();
$uses = class_uses($class);
$traits = [
CustomerTrait::class,
ShippingTrait::class,
OrderTrait::class,
];
foreach ($traits as $trait) {
if (in_array($trait, $uses) && property_exists($trait, 'column_extensions')) {
$column_extensions = $trait::$column_extensions;
foreach ($column_extensions as $field => $extensions) {
if (isset($cm->fieldMappings[$field])) {
foreach ($extensions as $extension => $value) {
// 型チェックを厳格にやるのは大変であること、ECCUBEのEntityのDBスキーマを上書きするのに
// 利用するのみなので、システムの動作には影響しないことから、'phpstan-ignore-next-line'をつけている。
// @phpstan-ignore-next-line
$cm->fieldMappings[$field][$extension] = $value;
}
}
}
}
}
}
}