DynamicRelationSubscriber.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace Base\OAuthClientBundle\EventListener;
  3. use Doctrine\ORM\Events;
  4. use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
  5. use Doctrine\Common\EventSubscriber;
  6. class DynamicRelationSubscriber implements EventSubscriber
  7. {
  8. /**
  9. * {@inheritDoc}
  10. */
  11. public function getSubscribedEvents()
  12. {
  13. return array(
  14. Events::loadClassMetadata,
  15. );
  16. }
  17. /**
  18. * @param LoadClassMetadataEventArgs $eventArgs
  19. */
  20. public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
  21. {
  22. // the $metadata is the whole mapping info for this class
  23. $metadata = $eventArgs->getClassMetadata();
  24. $classes = array(
  25. 'Base\OAuthServerBundle\Entity\AccessToken',
  26. 'Base\OAuthServerBundle\Entity\AuthCode',
  27. 'Base\OAuthServerBundle\Entity\RefreshToken'
  28. );
  29. if (!in_array($metadata->getName(), $classes)) {
  30. return;
  31. }
  32. $userClass = 'Base\UserBundle\Entity\User';
  33. $OAuthUserClass = 'Base\OAuthClientBundle\Security\Core\User\CustomOAuthUser';
  34. $metadata->mapManyToOne(array(
  35. 'targetEntity' => class_exists($userClass) ? $userClass : $OAuthUserClass,
  36. 'fieldName' => 'user'
  37. ));
  38. }
  39. }