13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelでYamlを扱う

Posted at

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

13
9
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
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?