SimpleObjectHydrator.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace Gedmo\Translatable\Hydrator\ORM;
  3. use Gedmo\Translatable\TranslationListener;
  4. use Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator as BaseSimpleObjectHydrator;
  5. /**
  6. * If query uses TranslationQueryWalker and is hydrating
  7. * objects - when it requires this custom object hydrator
  8. * in order to skip onLoad event from triggering retranslation
  9. * of the fields
  10. *
  11. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  12. * @package Gedmo.Translatable.Hydrator.ORM
  13. * @subpackage ObjectHydrator
  14. * @link http://www.gediminasm.org
  15. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  16. */
  17. class SimpleObjectHydrator extends BaseSimpleObjectHydrator
  18. {
  19. /**
  20. * 2.1 version
  21. * {@inheritdoc}
  22. */
  23. protected function _hydrateAll()
  24. {
  25. $listener = $this->getTranslationListener();
  26. $listener->setSkipOnLoad(true);
  27. $result = parent::_hydrateAll();
  28. $listener->setSkipOnLoad(false);
  29. return $result;
  30. }
  31. /**
  32. * 2.2 version
  33. * {@inheritdoc}
  34. */
  35. protected function hydrateAllData()
  36. {
  37. $listener = $this->getTranslationListener();
  38. $listener->setSkipOnLoad(true);
  39. $result = parent::hydrateAllData();
  40. $listener->setSkipOnLoad(false);
  41. return $result;
  42. }
  43. /**
  44. * Get the currently used TranslationListener
  45. *
  46. * @throws \Gedmo\Exception\RuntimeException - if listener is not found
  47. * @return TranslationListener
  48. */
  49. protected function getTranslationListener()
  50. {
  51. $translationListener = null;
  52. foreach ($this->_em->getEventManager()->getListeners() as $event => $listeners) {
  53. foreach ($listeners as $hash => $listener) {
  54. if ($listener instanceof TranslationListener) {
  55. $translationListener = $listener;
  56. break;
  57. }
  58. }
  59. if ($translationListener) {
  60. break;
  61. }
  62. }
  63. if (is_null($translationListener)) {
  64. throw new \Gedmo\Exception\RuntimeException('The translation listener could not be found');
  65. }
  66. return $translationListener;
  67. }
  68. }