Yaml.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Gedmo\References\Mapping\Driver;
  3. use Gedmo\Mapping\Driver\File;
  4. use Gedmo\Mapping\Driver;
  5. use Gedmo\Exception\InvalidMappingException;
  6. /**
  7. * @author Gonzalo Vilaseca <gonzalo.vilaseca@reiss.com>
  8. */
  9. class Yaml extends File implements Driver
  10. {
  11. /**
  12. * File extension
  13. * @var string
  14. */
  15. protected $_extension = '.dcm.yml';
  16. private $validReferences = array(
  17. 'referenceOne' => array(),
  18. 'referenceMany' => array(),
  19. 'referenceManyEmbed' => array(),
  20. );
  21. /**
  22. * {@inheritDoc}
  23. */
  24. public function readExtendedMetadata($meta, array &$config)
  25. {
  26. $mapping = $this->_getMapping($meta->name);
  27. if (isset($mapping['gedmo']) && isset($mapping['gedmo']['reference'])) {
  28. foreach ($mapping['gedmo']['reference'] as $field => $fieldMapping) {
  29. $reference = $fieldMapping['reference'];
  30. if (!in_array($reference, array_keys($this->validReferences))) {
  31. throw new InvalidMappingException(
  32. $reference .
  33. ' is not a valid reference, valid references are: ' .
  34. implode(', ', array_keys($this->validReferences))
  35. );
  36. }
  37. $config[$reference][$field] = array(
  38. 'field' => $field,
  39. 'type' => $fieldMapping['type'],
  40. 'class' => $fieldMapping['class'],
  41. );
  42. if (array_key_exists('mappedBy', $fieldMapping)) {
  43. $config[$reference][$field]['mappedBy'] = $fieldMapping['mappedBy'];
  44. }
  45. if (array_key_exists('identifier', $fieldMapping)) {
  46. $config[$reference][$field]['identifier'] = $fieldMapping['identifier'];
  47. }
  48. if (array_key_exists('inversedBy', $fieldMapping)) {
  49. $config[$reference][$field]['inversedBy'] = $fieldMapping['inversedBy'];
  50. }
  51. }
  52. }
  53. $config = array_merge($this->validReferences, $config);
  54. }
  55. /**
  56. * {@inheritDoc}
  57. */
  58. protected function _loadMappingFile($file)
  59. {
  60. return \Symfony\Component\Yaml\Yaml::parse($file);
  61. }
  62. }