AbstractTreeRepository.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace Gedmo\Tree;
  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. $evm = $em->getEventManager();
  21. $treeListener = null;
  22. foreach ($evm->getListeners() as $event => $listeners) {
  23. foreach ($listeners as $hash => $listener) {
  24. if ($listener instanceof \Gedmo\Tree\TreeListener) {
  25. $treeListener = $listener;
  26. break;
  27. }
  28. }
  29. }
  30. if (is_null($treeListener)) {
  31. throw new \Gedmo\Exception\InvalidMappingException('This repository can be attached only to ORM tree listener');
  32. }
  33. $this->listener = $treeListener;
  34. if (!$this->validates()) {
  35. throw new \Gedmo\Exception\InvalidMappingException('This repository cannot be used for tree type: ' . $treeListener->getStrategy($em, $class->name)->getName());
  36. }
  37. }
  38. /**
  39. * Checks if current repository is right
  40. * for currently used tree strategy
  41. *
  42. * @return bool
  43. */
  44. abstract protected function validates();
  45. }