1: <?php
2:
3: /*
4: * This file is part of the Symfony package.
5: *
6: * (c) Fabien Potencier <fabien@symfony.com>
7: *
8: * For the full copyright and license information, please view the LICENSE
9: * file that was distributed with this source code.
10: */
11:
12: namespace Symfony\Component\Yaml;
13:
14: /**
15: * Dumper dumps PHP variables to YAML strings.
16: *
17: * @author Fabien Potencier <fabien@symfony.com>
18: */
19: class Dumper
20: {
21: /**
22: * The amount of spaces to use for indentation of nested nodes.
23: *
24: * @var int
25: */
26: protected $indentation = 4;
27:
28: /**
29: * Sets the indentation.
30: *
31: * @param int $num The amount of spaces to use for indentation of nested nodes
32: */
33: public function setIndentation($num)
34: {
35: if ($num < 1) {
36: throw new \InvalidArgumentException('The indentation must be greater than zero.');
37: }
38:
39: $this->indentation = (int) $num;
40: }
41:
42: /**
43: * Dumps a PHP value to YAML.
44: *
45: * @param mixed $input The PHP value
46: * @param int $inline The level where you switch to inline YAML
47: * @param int $indent The level of indentation (used internally)
48: * @param bool $exceptionOnInvalidType True if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
49: * @param bool $objectSupport True if object support is enabled, false otherwise
50: *
51: * @return string The YAML representation of the PHP value
52: */
53: public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false)
54: {
55: $output = '';
56: $prefix = $indent ? str_repeat(' ', $indent) : '';
57:
58: if ($inline <= 0 || !\is_array($input) || empty($input)) {
59: $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport);
60: } else {
61: $isAHash = Inline::isHash($input);
62:
63: foreach ($input as $key => $value) {
64: $willBeInlined = $inline - 1 <= 0 || !\is_array($value) || empty($value);
65:
66: $output .= sprintf('%s%s%s%s',
67: $prefix,
68: $isAHash ? Inline::dump($key, $exceptionOnInvalidType, $objectSupport).':' : '-',
69: $willBeInlined ? ' ' : "\n",
70: $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $exceptionOnInvalidType, $objectSupport)
71: ).($willBeInlined ? "\n" : '');
72: }
73: }
74:
75: return $output;
76: }
77: }
78: