File.php 2.6 KB

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