diff --git a/src/Symfony/Component/Yaml/CHANGELOG.md b/src/Symfony/Component/Yaml/CHANGELOG.md index 1bc5561ba3..51e358b6bb 100644 --- a/src/Symfony/Component/Yaml/CHANGELOG.md +++ b/src/Symfony/Component/Yaml/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +4.4.0 +----- + + * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. + 4.3.0 ----- diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index 4b12b9b11a..c028ccf071 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -33,6 +33,7 @@ class Inline private static $objectSupport = false; private static $objectForMap = false; private static $constantSupport = false; + private static $nullAsTilde = false; /** * @param int $flags @@ -45,6 +46,7 @@ class Inline self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); + self::$nullAsTilde = (bool) (Yaml::DUMP_NULL_AS_TILDE & $flags); self::$parsedFilename = $parsedFilename; if (null !== $parsedLineNumber) { @@ -129,7 +131,7 @@ class Inline throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); } - return 'null'; + return self::dumpNull($flags); case $value instanceof \DateTimeInterface: return $value->format('c'); case \is_object($value): @@ -155,11 +157,11 @@ class Inline throw new DumpException('Object support when dumping a YAML file has been disabled.'); } - return 'null'; + return self::dumpNull($flags); case \is_array($value): return self::dumpArray($value, $flags); case null === $value: - return 'null'; + return self::dumpNull($flags); case true === $value: return 'true'; case false === $value: @@ -256,6 +258,15 @@ class Inline return sprintf('{ %s }', implode(', ', $output)); } + private static function dumpNull(int $flags): string + { + if (Yaml::DUMP_NULL_AS_TILDE & $flags) { + return '~'; + } + + return 'null'; + } + /** * Parses a YAML scalar. * diff --git a/src/Symfony/Component/Yaml/Tests/DumperTest.php b/src/Symfony/Component/Yaml/Tests/DumperTest.php index 24d956b09b..d83733801d 100644 --- a/src/Symfony/Component/Yaml/Tests/DumperTest.php +++ b/src/Symfony/Component/Yaml/Tests/DumperTest.php @@ -513,6 +513,11 @@ YAML; { new Dumper(-4); } + + public function testDumpNullAsTilde() + { + $this->assertSame('{ foo: ~ }', $this->dumper->dump(['foo' => null], 0, 0, Yaml::DUMP_NULL_AS_TILDE)); + } } class A diff --git a/src/Symfony/Component/Yaml/Yaml.php b/src/Symfony/Component/Yaml/Yaml.php index 94a5e4ad7d..4efceb3e25 100644 --- a/src/Symfony/Component/Yaml/Yaml.php +++ b/src/Symfony/Component/Yaml/Yaml.php @@ -33,6 +33,7 @@ class Yaml const PARSE_CONSTANT = 256; const PARSE_CUSTOM_TAGS = 512; const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; + const DUMP_NULL_AS_TILDE = 2048; /** * Parses a YAML file into a PHP value.