2016-05-07 12:59:40 +02:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Yaml ;
/**
* Dumper dumps PHP variables to YAML strings .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class Dumper
{
/**
* The amount of spaces to use for indentation of nested nodes .
*
* @ var int
*/
2016-12-30 00:04:12 +01:00
protected $indentation ;
/**
* @ param int $indentation
*/
public function __construct ( $indentation = 4 )
{
if ( $indentation < 1 ) {
throw new \InvalidArgumentException ( 'The indentation must be greater than zero.' );
}
$this -> indentation = $indentation ;
}
2016-05-07 12:59:40 +02:00
/**
* Sets the indentation .
*
2016-12-30 00:04:12 +01:00
* @ param int $num The amount of spaces to use for indentation of nested nodes
2016-05-07 12:59:40 +02:00
*/
public function setIndentation ( $num )
{
2016-12-30 00:04:12 +01:00
@ trigger_error ( 'The ' . __METHOD__ . ' method is deprecated since version 3.1 and will be removed in 4.0. Pass the indentation to the constructor instead.' , E_USER_DEPRECATED );
2016-05-07 12:59:40 +02:00
$this -> indentation = ( int ) $num ;
}
/**
* Dumps a PHP value to YAML .
*
2016-12-30 00:04:12 +01:00
* @ param mixed $input The PHP value
* @ param int $inline The level where you switch to inline YAML
* @ param int $indent The level of indentation ( used internally )
* @ param int $flags A bit field of Yaml :: DUMP_ * constants to customize the dumped YAML string
2016-05-07 12:59:40 +02:00
*
* @ return string The YAML representation of the PHP value
*/
2016-12-30 00:04:12 +01:00
public function dump ( $input , $inline = 0 , $indent = 0 , $flags = 0 )
2016-05-07 12:59:40 +02:00
{
2016-12-30 00:04:12 +01:00
if ( is_bool ( $flags )) {
@ trigger_error ( 'Passing a boolean flag to toggle exception handling is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE flag instead.' , E_USER_DEPRECATED );
if ( $flags ) {
$flags = Yaml :: DUMP_EXCEPTION_ON_INVALID_TYPE ;
} else {
$flags = 0 ;
}
}
if ( func_num_args () >= 5 ) {
@ trigger_error ( 'Passing a boolean flag to toggle object support is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::DUMP_OBJECT flag instead.' , E_USER_DEPRECATED );
if ( func_get_arg ( 4 )) {
$flags |= Yaml :: DUMP_OBJECT ;
}
}
2016-05-07 12:59:40 +02:00
$output = '' ;
$prefix = $indent ? str_repeat ( ' ' , $indent ) : '' ;
if ( $inline <= 0 || ! is_array ( $input ) || empty ( $input )) {
2016-12-30 00:04:12 +01:00
$output .= $prefix . Inline :: dump ( $input , $flags );
2016-05-07 12:59:40 +02:00
} else {
2016-12-30 00:04:12 +01:00
$isAHash = Inline :: isHash ( $input );
2016-05-07 12:59:40 +02:00
foreach ( $input as $key => $value ) {
2016-12-30 00:04:12 +01:00
if ( $inline >= 1 && Yaml :: DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && is_string ( $value ) && false !== strpos ( $value , " \n " )) {
$output .= sprintf ( " %s%s%s | \n " , $prefix , $isAHash ? Inline :: dump ( $key , $flags ) . ':' : '-' , '' );
foreach ( preg_split ( '/\n|\r\n/' , $value ) as $row ) {
$output .= sprintf ( " %s%s%s \n " , $prefix , str_repeat ( ' ' , $this -> indentation ), $row );
}
continue ;
}
2016-05-07 12:59:40 +02:00
$willBeInlined = $inline - 1 <= 0 || ! is_array ( $value ) || empty ( $value );
$output .= sprintf ( '%s%s%s%s' ,
$prefix ,
2016-12-30 00:04:12 +01:00
$isAHash ? Inline :: dump ( $key , $flags ) . ':' : '-' ,
2016-05-07 12:59:40 +02:00
$willBeInlined ? ' ' : " \n " ,
2016-12-30 00:04:12 +01:00
$this -> dump ( $value , $inline - 1 , $willBeInlined ? 0 : $indent + $this -> indentation , $flags )
2016-05-07 12:59:40 +02:00
) . ( $willBeInlined ? " \n " : '' );
}
}
return $output ;
}
}