2010-01-04 14:26:20 +00:00
< ? php
/*
2010-04-07 01:51:29 +01:00
* This file is part of the Symfony package .
2011-01-15 13:29:43 +00:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-01-04 14:26:20 +00:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2011-01-15 13:29:43 +00:00
namespace Symfony\Component\Yaml ;
2011-06-14 11:44:54 +01:00
use Symfony\Component\Yaml\Exception\ParseException ;
2010-01-04 14:26:20 +00:00
/**
* Yaml offers convenience methods to load and dump YAML .
*
2011-03-06 11:40:06 +00:00
* @ author Fabien Potencier < fabien @ symfony . com >
2011-03-24 08:02:09 +00:00
*
* @ api
2010-01-04 14:26:20 +00:00
*/
2010-02-11 18:24:23 +00:00
class Yaml
2010-01-04 14:26:20 +00:00
{
2010-05-06 12:25:53 +01:00
/**
2011-06-14 11:19:35 +01:00
* Parses YAML into a PHP array .
2010-05-06 12:25:53 +01:00
*
2011-06-14 11:19:35 +01:00
* The parse method , when supplied with a YAML stream ( string or file ),
2010-05-06 12:25:53 +01:00
* will do its best to convert YAML in a file into a PHP array .
*
* Usage :
* < code >
2014-11-29 13:06:55 +00:00
* $array = Yaml :: parse ( file_get_contents ( 'config.yml' ));
2010-05-06 12:25:53 +01:00
* print_r ( $array );
* </ code >
*
2013-01-17 14:01:21 +00:00
* As this method accepts both plain strings and file names as an input ,
* you must validate the input before calling this method . Passing a file
* as an input is a deprecated feature and will be removed in 3.0 .
*
2014-11-30 13:33:44 +00:00
* @ param string $input Path to a YAML file or a string containing YAML
* @ param bool $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
* @ param bool $objectSupport True if object support is enabled , false otherwise
2010-05-06 12:25:53 +01:00
*
* @ return array The YAML converted to a PHP array
*
2012-04-05 14:34:44 +01:00
* @ throws ParseException If the YAML is not valid
2011-03-24 08:02:09 +00:00
*
2014-12-09 17:32:32 +00:00
* @ deprecated The ability to pass file names to Yaml :: parse () was deprecated in 2.2 and will be removed in 3.0 . Please , pass the contents of the file instead .
2014-11-29 13:06:55 +00:00
*
2011-03-24 08:02:09 +00:00
* @ api
2010-05-06 12:25:53 +01:00
*/
added a way to enable/disable object support when parsing/dumping
By default, object support is disabled, and instead of throwing an
exception when an object is handled, null is returned.
If you do need object support, enable it via:
Yaml::dump($data, false, true);
If you want an exception to be thrown in case an invalid type is handled
(a PHP resource or a PHP object), pass true as the second argument:
Yaml::dump($data, true, true);
The same can be done when parsing:
Yaml::parse($data, 2, false, true);
2013-01-17 08:34:45 +00:00
public static function parse ( $input , $exceptionOnInvalidType = false , $objectSupport = false )
2010-01-04 14:26:20 +00:00
{
2010-05-06 12:25:53 +01:00
// if input is a file, process it
2011-11-07 15:43:15 +00:00
$file = '' ;
2012-01-13 08:48:50 +00:00
if ( strpos ( $input , " \n " ) === false && is_file ( $input )) {
2014-12-09 17:32:32 +00:00
trigger_error ( 'The ability to pass file names to Yaml::parse() was deprecated in 2.2 and will be removed in 3.0. Please, pass the contents of the file instead.' , E_USER_DEPRECATED );
2014-11-29 13:06:55 +00:00
2012-01-13 08:48:50 +00:00
if ( false === is_readable ( $input )) {
2012-01-13 15:48:38 +00:00
throw new ParseException ( sprintf ( 'Unable to parse "%s" as the file is not readable.' , $input ));
2012-01-13 08:48:50 +00:00
}
2010-05-06 12:25:53 +01:00
$file = $input ;
2013-03-01 08:25:57 +00:00
$input = file_get_contents ( $file );
2010-05-06 12:25:53 +01:00
}
$yaml = new Parser ();
2010-05-07 15:09:11 +01:00
try {
added a way to enable/disable object support when parsing/dumping
By default, object support is disabled, and instead of throwing an
exception when an object is handled, null is returned.
If you do need object support, enable it via:
Yaml::dump($data, false, true);
If you want an exception to be thrown in case an invalid type is handled
(a PHP resource or a PHP object), pass true as the second argument:
Yaml::dump($data, true, true);
The same can be done when parsing:
Yaml::parse($data, 2, false, true);
2013-01-17 08:34:45 +00:00
return $yaml -> parse ( $input , $exceptionOnInvalidType , $objectSupport );
2011-06-14 11:44:54 +01:00
} catch ( ParseException $e ) {
if ( $file ) {
$e -> setParsedFile ( $file );
}
2010-05-06 12:25:53 +01:00
2011-06-14 11:44:54 +01:00
throw $e ;
}
2010-01-04 14:26:20 +00:00
}
2010-05-06 12:25:53 +01:00
/**
* Dumps a PHP array to a YAML string .
*
* The dump method , when supplied with an array , will do its best
* to convert the array into friendly YAML .
*
2014-11-30 13:33:44 +00:00
* @ param array $array PHP array
* @ param int $inline The level where you switch to inline YAML
* @ param int $indent The amount of spaces to use for indentation of nested nodes .
* @ param bool $exceptionOnInvalidType true if an exception must be thrown on invalid types ( a PHP resource or object ), false otherwise
* @ param bool $objectSupport true if object support is enabled , false otherwise
2010-05-06 12:25:53 +01:00
*
* @ return string A YAML string representing the original PHP array
2011-03-24 08:02:09 +00:00
*
* @ api
2010-05-06 12:25:53 +01:00
*/
2013-01-27 16:12:43 +00:00
public static function dump ( $array , $inline = 2 , $indent = 4 , $exceptionOnInvalidType = false , $objectSupport = false )
2010-01-04 14:26:20 +00:00
{
2010-05-06 12:25:53 +01:00
$yaml = new Dumper ();
2012-08-04 23:46:53 +01:00
$yaml -> setIndentation ( $indent );
2010-01-04 14:26:20 +00:00
2013-01-17 21:16:19 +00:00
return $yaml -> dump ( $array , $inline , 0 , $exceptionOnInvalidType , $objectSupport );
2010-05-06 12:25:53 +01:00
}
2010-01-04 14:26:20 +00:00
}