Symfony Component Advent Calendar 2023の3日目の記事です。
YAMLを読み書き、"Yaml"
Yamlは、Yamlの解析や作成を行うコンポーネントです。Symfony以外でも使え、Symfonyコンポーネントの中でも使われてるサービスが特出して多いコンポーネントになります。
インストール
composer require symfony/yaml
解析
解析、つまり読み込みに関しては文字列とファイルの両方をサポートします。
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;
try {
$result = Yaml::parse('apple: りんご'); // ['apple' => 'りんご']
$resultFromFile = Yaml::parseFile('/path/to/file.yaml'); // YAMLファイルを解析
} catch (ParseException $e) {
echo "failed";
}
書き出し
書き出しについては、dump()
メソッドで行います。
$param = [
'fruits' => [
'apple' => 'りんご',
'orange' => 'オレンジ',
'pear' => 'なし',
],
'date' => '2023-12-03',
];
$dumped = Yaml::dump($param);
/*
fruits:
apple: りんご
orange: オレンジ
pear: なし
date: '2023-12-03'
*/
特殊な解析
フラグをつけることで特殊な解析を行うことができます。いくつかピックアップしてご紹介します。
PARSE_DATETIME
2023-12-01 00:00:00
みたいな文字列を日付型にしたい場合は解析時に Yaml::PARSE_DATETIME
を指定します。
Yaml::parse('date: 2023-10-01 12:34:56', Yaml::PARSE_DATETIME);
/*
[
"date" => DateTimeImmutable @1696163696 {#195
date: 2023-10-01 12:34:56.0 UTC (+00:00)
}
]
*/
PARSE_CONSTANT
PHPの定数を解析します。 !php/const PHP_INI_SIZE
であれば、 PHP_INI_SIZEの値を、
!php/enum {Enum}
であれば、Enumの値として解析します。
Yaml::parse('size: !php/const PHP_INI_SIZE, meal: !php/enum App\Enum\MealType::Lunch', Yaml::PARSE_CONSTANT);
/*
[
"size" => 8,
"meal" => App\Enum\MealType^ {#195
+name: "Lunch"
+value: "昼食"
}
]
*/
まとめ
今回はYaml
を紹介しました。Symfonyは設定にYAMLを使っていますが、裏側ではこのコンポーネントが頑張って解析してくれていたのがよくわかります。