Parser.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\View\Layout\Argument;
  7. use Magento\Framework\Config\Converter\Dom\Flat as FlatConverter;
  8. use Magento\Framework\Config\Dom\ArrayNodeConfig;
  9. use Magento\Framework\Config\Dom\NodePathMatcher;
  10. /**
  11. * Parser of a layout argument node that returns its array representation with no data loss
  12. */
  13. class Parser
  14. {
  15. /**
  16. * @var FlatConverter
  17. */
  18. private $converter;
  19. /**
  20. * Build and return array representation of layout argument node
  21. *
  22. * @param \DOMNode $argumentNode
  23. * @return array|string
  24. */
  25. public function parse(\DOMNode $argumentNode)
  26. {
  27. // Base path is specified to use more meaningful XPaths in config
  28. return $this->getConverter()->convert($argumentNode, 'argument');
  29. }
  30. /**
  31. * Retrieve instance of XML converter, suitable for layout argument nodes
  32. *
  33. * @return FlatConverter
  34. */
  35. protected function getConverter()
  36. {
  37. if (!$this->converter) {
  38. $arrayNodeConfig = new ArrayNodeConfig(
  39. new NodePathMatcher(),
  40. [
  41. 'argument/param' => 'name',
  42. 'argument(/item)+' => 'name',
  43. 'argument(/item)+/param' => 'name',
  44. 'argument(/argument)+' => 'name',
  45. 'argument((/argument)+(/item)+)+' => 'name',
  46. 'argument((/argument)+(/item)+)+/param' => 'name'
  47. ],
  48. ['argument/updater']
  49. );
  50. $this->converter = new FlatConverter($arrayNodeConfig);
  51. }
  52. return $this->converter;
  53. }
  54. }