- 更新日: 2015年11月24日
- PHP & CakePHP
CakePHP3でYAMLの設定ファイルを読み込み
CakePHP 3 で Twitter や Facebook などの API キーを YAML ファイルに記載して、それをロードしたいケースがあった。モダンなフレームワークのはずなので、デフォルトで YAML パーサーのライブラリ入ってないかな〜と探したら、symfony/yaml が入っていたのでそれを使いました。
— 環境 —
CakePHP 3.1.1
PHP 5.5.19
Twitter や Facebook などの API キーを設定
まず、各種 API キーなどの情報を config/secrets.yml を作成して YAML の設定ファイルとして書いた。
config/secrets.yml
1 2 3 4 5 6 |
twitter: app_key: "******" app_secret: "******" facebook: app_key: "******" app_secret: "******" |
この手のシークレットにしておきたい情報は、CakePHP3 の場合どこに書くのが定石でしょうかね?… ちょっと検索しても分からなかったので、Rails を真似ました。
API キーなどはリモートのリポジトリに置きたくないので config/secrets.yml を .gitignore に追加。
.gitignore
1 2 3 4 5 6 7 |
/vendor/* /config/app.php /tmp/* /logs/* /config/secrets.yml |
symfony/yaml で YAML 設定をロードして取得
続いて、アプリケーション側で YAML の設定ファイルを読み込む。CakePHP 3 はデフォルトで YAML パーサーのライブラリが入ってるんじゃないかと考えまして、vendor ディレクトリを “yaml” で grep したところ、symfony/yaml が入っていた。その README を読んでコードを console で試したのが以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ bin/cake console >>> use Symfony\Component\Yaml\Yaml; => false >>> $secrets = Yaml::parse(file_get_contents("config/secrets.yml")); => [ "twitter" => [ "app_key" => "******", "app_secret" => "******", ], "facebook" => [ "app_key" => "******", "app_secret" => "******", ], ] >>> $secrets["twitter"]["app_key"] => "******" |
YAML に書いた設定を PHP の配列として取得できました。
config/bootstrap.php 内で secrets.yml の設定を読み込む
もう一歩進めて実際にアプリケーション内で使うために、config/bootstrap.php で secrets.yml を読み込み、CakePHP アプリケーション初期化時に Configure に設定するようにしました。以下を config/bootstrap.php に追記。
config/bootstrap.php
1 2 3 |
// load secrets.yml use Symfony\Component\Yaml\Yaml; Configure::write('secrets', Yaml::parse(file_get_contents("config/secrets.yml"))); |
コントローラーやコンポーネントで使う時は、以下のようにする。
1 2 3 4 |
use Cake\Core\Configure; $secrets = Configure::read('secrets'); $twitter_key = $secrets["twitter"]["app_key"]; |
以上です。CakePHP 3 だと、YAML のパースには symfony/yaml を使うのがお手軽です。もっと良い方法があればぜひご教授お願いいたします!
【追記 2015/11/24】
nojimage さんに、コメントで便利なライブラリを教えて頂きました。ありがとうございました!
guemidiborhane/Cake-Yaml
https://github.com/guemidiborhane/Cake-Yaml
【追記ここまで】
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
- 初回公開日: 2015年10月14日
- 2件のコメント
guemidiborhane/Cake-Yaml https://github.com/guemidiborhane/Cake-Yaml
を使うとよいですよ。
Configure::load(‘foo’, ‘yaml’); で config/foo.ymlをパースしてConfigure::readで取り出せる形にしてくれます。
便利なライブラリを教えて頂きありがとうございます!
これを使ったほうが遥かに楽そうですね。