2

現在、エンティティのクラス名を取得して、変更をログに保存しています。これはリスナーで発生します。

私のサービス層では:

$product = $line->getProduct();

$product->setAvailability($product->getAvailability() - $line->getAmount());
$em->persist($product);

問題は、リスナーで次のことを行うことです。

$className = join('', array_slice(explode('\\', get_class($entity)), -1));
$modification->setEntidad($className);

$className改造にセットされているのはですmiomioBundleEntityProductoProxy

プロキシ クラス名ではなく、エンティティの実際のクラス名を取得するにはどうすればよいですか?

4

2 に答える 2

1

get_classプロキシはORMと関連付けの遅延読み込みを機能させるために必要な概念であるため、プロキシを呼び出すときにプロキシ名を受け取るという事実はごく普通のことです。

次のAPIを使用して、元のクラス名を取得できます。

$realClassName = $entityManager->getClassMetadata(get_class($object))->getName();

次に、独自の変換を適用できます。

$normalizedClassName = join('', array_slice(explode('\\', $realClassName), -1));

$modificacion->setEntidad($normalizedClassName);
于 2013-03-18T17:28:54.537 に答える