File.php 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Gedmo\Mapping\Driver;
  3. use Doctrine\Common\Persistence\Mapping\Driver\FileDriver;
  4. use Doctrine\Common\Persistence\Mapping\Driver\FileLocator;
  5. use Doctrine\ORM\Mapping\Driver\AbstractFileDriver;
  6. use Gedmo\Mapping\Driver;
  7. /**
  8. * The mapping FileDriver abstract class, defines the
  9. * metadata extraction function common among
  10. * all drivers used on these extensions by file based
  11. * drivers.
  12. *
  13. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  14. * @package Gedmo.Common.Mapping
  15. * @subpackage FileDriver
  16. * @link http://www.gediminasm.org
  17. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  18. */
  19. abstract class File implements Driver
  20. {
  21. /**
  22. * @var FileLocator
  23. */
  24. protected $locator;
  25. /**
  26. * File extension, must be set in child class
  27. * @var string
  28. */
  29. protected $_extension;
  30. /**
  31. * original driver if it is available
  32. */
  33. protected $_originalDriver = null;
  34. public function setLocator(FileLocator $locator)
  35. {
  36. $this->locator = $locator;
  37. }
  38. /**
  39. * Set the paths for file lookup
  40. *
  41. * @param array $paths
  42. * @return void
  43. */
  44. public function setPaths($paths)
  45. {
  46. $this->_paths = (array)$paths;
  47. }
  48. /**
  49. * Set the file extension
  50. *
  51. * @param string $extension
  52. * @return void
  53. */
  54. public function setExtension($extension)
  55. {
  56. $this->_extension = $extension;
  57. }
  58. /**
  59. * Loads a mapping file with the given name and returns a map
  60. * from class/entity names to their corresponding elements.
  61. *
  62. * @param string $file The mapping file to load.
  63. * @return array
  64. */
  65. abstract protected function _loadMappingFile($file);
  66. /**
  67. * Tries to get a mapping for a given class
  68. *
  69. * @param $className
  70. * @return null|array|object
  71. */
  72. protected function _getMapping($className)
  73. {
  74. //try loading mapping from original driver first
  75. $mapping = null;
  76. if (!is_null($this->_originalDriver)) {
  77. if ($this->_originalDriver instanceof FileDriver || $this->_originalDriver instanceof AbstractFileDriver) {
  78. $mapping = $this->_originalDriver->getElement($className);
  79. }
  80. }
  81. //if no mapping found try to load mapping file again
  82. if (is_null($mapping)) {
  83. $yaml = $this->_loadMappingFile($this->locator->findMappingFile($className));
  84. $mapping = $yaml[$className];
  85. }
  86. return $mapping;
  87. }
  88. /**
  89. * Passes in the mapping read by original driver
  90. *
  91. * @param $driver
  92. * @return void
  93. */
  94. public function setOriginalDriver($driver)
  95. {
  96. $this->_originalDriver = $driver;
  97. }
  98. }