12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- <?php
- namespace Gedmo\Tree;
- 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);
- $evm = $em->getEventManager();
- $treeListener = null;
- foreach ($evm->getListeners() as $event => $listeners) {
- foreach ($listeners as $hash => $listener) {
- if ($listener instanceof \Gedmo\Tree\TreeListener) {
- $treeListener = $listener;
- 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();
- }
|