CakePHP3のConfigureクラスに関して調べました

スポンサーリンク

こんばんは。ファガイです。
本日は、CakePHP3のConfigureクラスに関して調べました。

使用環境

  • CakePHP3-RC1
  • PHP5.4
  • MariaDB

はじめに

基本的にConfigureクラスの動作を確認するのはconfig/bootstrap.phpで行いました。ちょうど、try-catchで書かれている箇所があるため、ここを参考にしました。

また、マニュアルを見ていただくと詳しく載ってるので、そちらを確認するとよいでしょう。
Configuration — CakePHP Cookbook 3.x documentation

2系との違い

2系では、PhpReaderだったのが、3系では、PhpConfigに変更されてたりします。
現状でRC1に搭載されているのは以下です。

  • PhpConfig – PHPで書くConfig
  • IniConfig – INIファイルで書くConfig

ほかに、予定されている物は以下となります。

  • JsonConfig – JSONで書くConfig

途中までCakePHP2と違うのかなって思って書いてたのですが、ほとんど一緒ですね・・・。

基本的な使い方

ConfigEngine定義

Configに使用するConfigEngineを定義します。(bootstrapには現在PhpConfigのみ登録されています。

use Cake\Core\Configure\Engine\PhpConfig;

// Configエンジン名をdefaultとしてPhpConfigエンジンを定義(エイリアスっぽいの
Configure::config('default', new PhpConfig());

このConfigEngineは他のエンジンや、自分で作ったエンジンも利用可能です。一度PhpConfigのソースを見てみると良いでしょう。

ファイルのロード

Engineのセットが完了したら、ファイルをロードしましょう。

// config/app.phpを読み込む。使用するエンジンはdefault。マージしない
Configure::load('app', 'default', false);

一応コメントに書いていますが、おそらくよく分からなくなるのはマージの部分でしょう。
マージはfalseの場合、上書きとなります。少し、説明が必要かもしれません。

[
    'item' => array(
        'id' => 1,
        'name' => 'Cake'
    )
]

[
    'item' => array(
        'id' => 2
    )
]

があったとして、前者を先にロードしておいて、後者をマージしないにすると、

[
    'item' => array(
        'id' => 2
    )
]

となります。逆に、マージするにすると、

[
    'item' => array(
        'id' => 2,
        'name' => 'Cake'
    )
]

となります。

また、読み込むエンジンが別だとしても、データは同じ場所に格納されるようになっています。

PhpConfigの形式に関して

ちょっと余談にはなりますが、おそらくPhpConfigの形式は次のバージョンから変わると思います。

まあ、変わる内容っていうのは単純に変数として持つのではなくて、戻り値として渡す形になると思われます。(devバージョンを見る感じ)

今は以下の様にconfigを書きますが

$config = [];

いずれこの形になるでしょう。

return [];

読み込んだConfigを確認する

// Appキーの中にあるencodingキーを取得する
Configure::read('App.encoding');

Configが存在するか確認する

Configure::check('App.encoding');

Configの一つのキーを削除する

Configure::delete('App.encoding');

Configを読んだ後、そのキーを消す

Configure::consume('test');

ConfigEngineを削除する

Configure::drop('default');

まとめ

Configureクラスはいつもどおりでした・・・w
まあ、知らない内容も知れたのでよかったです~。

ではではー。

コメント

  1. 匿名 より:

    Configure::write(‘Signup.twitter.consumerKey’,”taroman”);
    $config = Configure::read(‘Signup.twitter.consumerKey’);

    で書き込みもいけます。

タイトルとURLをコピーしました