Yaml.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace Gedmo\Translatable\Mapping\Driver;
  3. use Gedmo\Mapping\Driver\File,
  4. Gedmo\Mapping\Driver,
  5. Doctrine\Common\Persistence\Mapping\ClassMetadata,
  6. Gedmo\Exception\InvalidMappingException;
  7. /**
  8. * This is a yaml mapping driver for Translatable
  9. * behavioral extension. Used for extraction of extended
  10. * metadata from yaml specificaly for Translatable
  11. * extension.
  12. *
  13. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  14. * @package Gedmo.Translatable.Mapping.Driver
  15. * @subpackage Yaml
  16. * @link http://www.gediminasm.org
  17. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  18. */
  19. class Yaml extends File implements Driver
  20. {
  21. /**
  22. * File extension
  23. * @var string
  24. */
  25. protected $_extension = '.dcm.yml';
  26. /**
  27. * {@inheritDoc}
  28. */
  29. public function validateFullMetadata(ClassMetadata $meta, array $config) {}
  30. /**
  31. * {@inheritDoc}
  32. */
  33. public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
  34. $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
  35. $mapping = $yaml[$meta->name];
  36. if (isset($mapping['gedmo'])) {
  37. $classMapping = $mapping['gedmo'];
  38. if (isset($classMapping['translation']['entity'])) {
  39. $translationEntity = $classMapping['translation']['entity'];
  40. if (!class_exists($translationEntity)) {
  41. throw new InvalidMappingException("Translation entity class: {$translationEntity} does not exist.");
  42. }
  43. $config['translationClass'] = $translationEntity;
  44. }
  45. if (isset($classMapping['translation']['locale'])) {
  46. $config['locale'] = $classMapping['translation']['locale'];
  47. } elseif (isset($classMapping['translation']['language'])) {
  48. $config['locale'] = $classMapping['translation']['language'];
  49. }
  50. }
  51. if (isset($mapping['fields'])) {
  52. foreach ($mapping['fields'] as $field => $fieldMapping) {
  53. if (isset($fieldMapping['gedmo'])) {
  54. if (in_array('translatable', $fieldMapping['gedmo'])) {
  55. // fields cannot be overrided and throws mapping exception
  56. $config['fields'][] = $field;
  57. }
  58. }
  59. }
  60. }
  61. }
  62. /**
  63. * {@inheritDoc}
  64. */
  65. protected function _loadMappingFile($file)
  66. {
  67. return \Symfony\Component\Yaml\Yaml::load($file);
  68. }
  69. }