LoginSignup
0
0

YAMLを読み書き、"Yaml"

Last updated at Posted at 2023-12-02

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を使っていますが、裏側ではこのコンポーネントが頑張って解析してくれていたのがよくわかります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0