laravel
YAML

LaravelでYamlを扱う

PHPにはyaml_parse()yaml_parse_file()などがYamlをパースする手段としてありますが、PECL拡張モジュールとして用意されていて標準のPHPにはバンドルされていません。せっかくComposerで楽にLaravelを導入したのにYamlパースするほうが大変だというのは納得がいかないので、別の方法を調べてみると非常に簡単でした。

  • PHP 7.1.12
  • Laravel 5.5.25

Yaml Componentのインストール

SymfonyのYaml Componentをインストールします。composerとgithubから導入できるとありますが、Laravel使っているならcomposerになるでしょう。

$ composer require symfony/yaml

Yaml Componentの登録

config/app.phpファイルの下の方に、aliasesの項目があります。ここには名前空間までを含めたクラスの別名を登録できます。ここを見るとよく見かけるAppの正体が、Illuminate\Support\Facades\Appであることがわかります。インストールしたYaml Componentもaliaseを登録しておきます。

'aliases' => [

    'App' => Illuminate\Support\Facades\App::class,

    ...

    'Validator' => Illuminate\Support\Facades\Validator::class,
    'View' => Illuminate\Support\Facades\View::class,
    'Yaml' => 'Symfony\Component\Yaml\Yaml', // 追加
],

Yaml Componentを使う

aliaseを登録したので、use Yaml;してあげることでYaml Componentが使えます。database/file.ymlをパースするコントローラを書いてみます。database_path()を使うことでdatabaseディレクトリの中のファイルパスが得られます。

<?php

namespace App\Http\Controllers;

use Yaml;

class YamlController extends Controller
{
    public function parse() {
        $yaml = Yaml::parse(
            file_get_contents(database_path('file.yml'))
        );
        var_dump($yaml);
    }
}

web.phpにRoute::get('/yaml', 'YamlController@parse');のように追加すればブラウザから確認できます。
以上です。