Yaml.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace Gedmo\Loggable\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 Loggable
  9. * behavioral extension. Used for extraction of extended
  10. * metadata from yaml specificaly for Loggable
  11. * extension.
  12. *
  13. * @author Boussekeyt Jules <jules.boussekeyt@gmail.com>
  14. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  15. * @package Gedmo.Loggable.Mapping.Driver
  16. * @subpackage Yaml
  17. * @link http://www.gediminasm.org
  18. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  19. */
  20. class Yaml extends File implements Driver
  21. {
  22. /**
  23. * File extension
  24. * @var string
  25. */
  26. protected $_extension = '.dcm.yml';
  27. /**
  28. * {@inheritDoc}
  29. */
  30. public function validateFullMetadata(ClassMetadata $meta, array $config)
  31. {
  32. }
  33. /**
  34. * {@inheritDoc}
  35. */
  36. public function readExtendedMetadata(ClassMetadata $meta, array &$config)
  37. {
  38. $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
  39. $mapping = $yaml[$meta->name];
  40. if (isset($mapping['gedmo'])) {
  41. $classMapping = $mapping['gedmo'];
  42. if (isset($classMapping['loggable'])) {
  43. $config['loggable'] = true;
  44. if (isset ($classMapping['loggable']['logEntryClass'])) {
  45. if (!class_exists($classMapping['loggable']['logEntryClass'])) {
  46. throw new InvalidMappingException("LogEntry class: {$classMapping['loggable']['logEntryClass']} does not exist.");
  47. }
  48. $config['logEntryClass'] = $classMapping['loggable']['logEntryClass'];
  49. }
  50. }
  51. }
  52. }
  53. /**
  54. * {@inheritDoc}
  55. */
  56. protected function _loadMappingFile($file)
  57. {
  58. return \Symfony\Component\Yaml\Yaml::load($file);
  59. }
  60. }