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');
のように追加すればブラウザから確認できます。
以上です。