123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- namespace Gedmo\Tree\Entity\Repository;
- use Doctrine\ORM\EntityRepository,
- Doctrine\ORM\EntityManager,
- Doctrine\ORM\Mapping\ClassMetadata;
- abstract class AbstractTreeRepository extends EntityRepository
- {
- /**
- * Tree listener on event manager
- *
- * @var AbstractTreeListener
- */
- protected $listener = null;
- /**
- * {@inheritdoc}
- */
- public function __construct(EntityManager $em, ClassMetadata $class)
- {
- parent::__construct($em, $class);
- $treeListener = null;
- foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
- foreach ($listeners as $hash => $listener) {
- if ($listener instanceof \Gedmo\Tree\TreeListener) {
- $treeListener = $listener;
- break;
- }
- }
- if ($treeListener) {
- break;
- }
- }
- if (is_null($treeListener)) {
- throw new \Gedmo\Exception\InvalidMappingException('This repository can be attached only to ORM tree listener');
- }
- $this->listener = $treeListener;
- if (!$this->validates()) {
- throw new \Gedmo\Exception\InvalidMappingException('This repository cannot be used for tree type: ' . $treeListener->getStrategy($em, $class->name)->getName());
- }
- }
- /**
- * Checks if current repository is right
- * for currently used tree strategy
- *
- * @return bool
- */
- abstract protected function validates();
- }
|