数値などを一元管理することで、メンテナンス性の向上やバグの防止に役立ちます。EC-CUBEのフレームワークであるSymfonyでは、yamlという設定ファイルを利用する方法が推奨されており、EC-CUBEでも様々な値が設定されています。(「app/config/eccube/packages/eccube.yaml」など。)
YAML(YAML Ain’t Markup Language、ヤムル or ヤメル)とは?
人が読みやすく、構造化されたデータを表現するためのデータ形式。主に設定ファイルやデータ交換のために使用される。
- シンプルで読みやすい
- インデント(タブではなくスペース)によって階層構造が表現される。
- コロンやハイフンなどのシンプルな記号を使用してデータを記述する。
- 柔軟なデータ型
- 文字列、数値、リスト、辞書(マップ)など、さまざまなデータ型が使える。
- データの構造化
- ネストされたデータ構造* で、複雑なデータ構造を簡単に表現できる。
* データが階層的に入れ子になっている構造のこと。リストの中にリストが入っていたり、辞書(マップ)の中に他の辞書やリストが入っていたり。
- ネストされたデータ構造* で、複雑なデータ構造を簡単に表現できる。
- プログラミング言語に依存しない
- 多くの言語で使用可能なため、広く利用されている。
ざっくり、「パラメータを管理するための辞書形式ファイル」といえますね。
以下手順で新たに独自の定数を設定することもできます。
services.yamlの作成
「services.yaml」という以下ファイルを作成し、「app/Customize/Resource/config」下に保存します。
parameters:
custom_parameter: 1000
定数名: 数値
という形式で、値をセットします。
インデントはタブキーではなく、半角スペースにするよう注意してください!
Controllerでservices.yamlのparameterを呼び出す
extends
でAbstractControllerを継承しているクラスであれば、以下のように記述することでservices.yamlに記述した定数を呼び出せます。(use宣言:use Eccube\Controller\AbstractController
を忘れないこと)
$this->eccubeConfig['custom_parameter'];
あとは適当な変数に代入したり、Twigテンプレートに渡したりして活用できます。簡単ですね。
ちなみに「app/config/eccube/packages/eccube.yaml」では、様々な定数がデフォルトで格納されています。(パスワードの最小&最大文字数など。)こちらのファイルに新しい定数を追加しても対応できるようですが、バージョン更新などの際に追記内容が消えてしまう可能性があるため、基本的にはCustomize下に新しくファイルを作って管理する方が良さそうです。
Serviceなど、AbstractControllerを継承しないクラスでyamlファイルに定義したパラメータを利用したい場合、以下コードを記述することで定数を呼び出すことができます。
use Eccube\Common\EccubeConfig;
private $eccubeConfig;
/**
* @param EccubeConfig $eccubeConfig
* @required
*/
public function setEccubeConfig(EccubeConfig $eccubeConfig)
{
$this->eccubeConfig = $eccubeConfig;
}