AbstractTreeRepository.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace Gedmo\Tree\Entity\Repository;
  3. use Doctrine\ORM\EntityRepository,
  4. Doctrine\ORM\EntityManager,
  5. Doctrine\ORM\Mapping\ClassMetadata;
  6. abstract class AbstractTreeRepository extends EntityRepository
  7. {
  8. /**
  9. * Tree listener on event manager
  10. *
  11. * @var AbstractTreeListener
  12. */
  13. protected $listener = null;
  14. /**
  15. * {@inheritdoc}
  16. */
  17. public function __construct(EntityManager $em, ClassMetadata $class)
  18. {
  19. parent::__construct($em, $class);
  20. $treeListener = null;
  21. foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
  22. foreach ($listeners as $hash => $listener) {
  23. if ($listener instanceof \Gedmo\Tree\TreeListener) {
  24. $treeListener = $listener;
  25. break;
  26. }
  27. }
  28. if ($treeListener) {
  29. break;
  30. }
  31. }
  32. if (is_null($treeListener)) {
  33. throw new \Gedmo\Exception\InvalidMappingException('This repository can be attached only to ORM tree listener');
  34. }
  35. $this->listener = $treeListener;
  36. if (!$this->validates()) {
  37. throw new \Gedmo\Exception\InvalidMappingException('This repository cannot be used for tree type: ' . $treeListener->getStrategy($em, $class->name)->getName());
  38. }
  39. }
  40. /**
  41. * Checks if current repository is right
  42. * for currently used tree strategy
  43. *
  44. * @return bool
  45. */
  46. abstract protected function validates();
  47. }