Yaml.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace Gedmo\Loggable\Mapping\Driver;
  3. use Gedmo\Mapping\Driver\File,
  4. Gedmo\Mapping\Driver,
  5. Gedmo\Exception\InvalidMappingException;
  6. /**
  7. * This is a yaml mapping driver for Loggable
  8. * behavioral extension. Used for extraction of extended
  9. * metadata from yaml specificaly for Loggable
  10. * extension.
  11. *
  12. * @author Boussekeyt Jules <jules.boussekeyt@gmail.com>
  13. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  14. * @package Gedmo.Loggable.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. * List of tree strategies available
  28. *
  29. * @var array
  30. */
  31. private $actions = array(
  32. 'create', 'update', 'delete'
  33. );
  34. /**
  35. * {@inheritDoc}
  36. */
  37. public function validateFullMetadata($meta, array $config)
  38. {
  39. if (isset($config['actions']) && is_array($config['actions'])) {
  40. foreach ($config['actions'] as $action) {
  41. if (!in_array($this->actions, $action)) {
  42. throw new InvalidMappingException("Action {$action} for class: {$meta->name} is invalid");
  43. }
  44. }
  45. }
  46. if (isset($config['actions']) && !is_array($config['actions'])) {
  47. throw new InvalidMappingException("Actions for class: {$meta->name} should be an array");
  48. }
  49. }
  50. /**
  51. * {@inheritDoc}
  52. */
  53. public function readExtendedMetadata($meta, array &$config)
  54. {
  55. $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
  56. $mapping = $yaml[$meta->name];
  57. if (isset($mapping['gedmo'])) {
  58. $classMapping = $mapping['gedmo'];
  59. if (isset($classMapping['loggable']['actions'])) {
  60. $actions = $classMapping['loggable']['actions'];
  61. $config['actions'] = $actions;
  62. }
  63. }
  64. }
  65. /**
  66. * {@inheritDoc}
  67. */
  68. protected function _loadMappingFile($file)
  69. {
  70. return \Symfony\Component\Yaml\Yaml::load($file);
  71. }
  72. }