Laravelに値(定数)を設定するconfigファイルとヘルパーの使い方!

Laravel

Laravelのconfigヘルパーの使い方と、configに値を定義する方法について記載します。 configファイルに値を書いておくと、Webアプリケーション内で定義した固定値をconfigヘルパーから取得できるようになります。 掲載しているサンプルコードはLaravel8で検証しています。

Laravelのconfigファイルとは?

configディレクトリ配下に配置されているファイルです。 PHPファイルを配置して、配列を返すようにしておくと、Webアプリケーション内から自由にアクセスして値を取り出して使用することができます。

例えば、Laravelに最初から配置されているconfig/app.phpを確認します。 ファイルの中身を省略しますが、下記のようにファイルから配列を返すようにしているだけです。

<?php

return [
    'name' => env('APP_NAME', 'Laravel'),
    'timezone' => 'UTC',
    'locale' => 'en',
];

このファイルからアプリケーション名を取得する場合は、configヘルパーを使ってconfig('app.name')とすると取得することができます。 タイムゾーンはconfig('app.timezone')で取得できます。 取得できる値は、配列の値として定義されている値になります。

configヘルパーに渡す引数に「ファイル名.項目名」とすると、定義されている値が取得できます。 configファイルに値を定義するときは、今後ほとんど変更がないような固定値を設定します。

.envやlangファイルと使い分けると良いかと思います。 アプリケーション内で使用するメッセージ(文字列)については、resources/lang配下で管理すると良いです。 langヘルパーやクラスで取得できます。詳しくは下記をご確認ください。 [https://codelikes.com/laravel-lang-messages/]

本番環境やローカル環境で変わる値がある場合は.envに記載すると良いかと思います。 詳しくは下記をご確認ください。 [https://codelikes.com/laravel-env-file/]

configファイルを追加する

実際にconfigファイルを作成して使ってみます。 configディレクトリ配下にファイルを置いて、配列定義すると、すぐに使用できるようになります。

const.phpという名前でファイルを作成しました。 中身には適当な値を定義してみました。

<?php

return [
    'page_url' => 'https://codelikes.com',
    'fruits' => ['apple', 'banana', 'lemon'],
    'gender' => [
        'male' => 1,
        'female' => 2,
    ],
];

configファイルの設定値を使用する

実際に使用するときにはconfigヘルパーを使用して、下記のように使います。 これは、アクセスされた時にhttps://codelikes.comにリダイレクトするメソッドです。

public function redirectCodelike() {
    return redirect(config('const.page_url'));
}

configに渡した引数のconst.page_urlで、定義されたhttp://codelikes.comが返ってきます。

配列のキーを指定した場合は配列が返ってきます。

dd(config('const.fruits'));

上記のように、配列のキーを指定してddヘルパーで出力すると、下記のように配列が返ってきたことが確認できます。

array:3 [
  0 => "apple"
  1 => "banana"
  2 => "lemon"
]

また、配列の中の連想配列の値にアクセスするには「ファイル名.項目名.項目名」のようにアクセスできます。 例えば、下記のように出力した場合です。

dd(config('const.gender.male'));

結果として、const.phpに定義した「1」が返ってきます。

終わりに

今回はconfigヘルパーを使って、設定値(定数)を取得する方法と設定値を追加する方法を書きました。 Laravelで使用する固定値は、文字列ならmessageファイル、環境で変わるなら.envなど管理する場所を考えて使うと良いかと思います。

設定した値に関連する文字列を取得したい場合が出てくるかもしれません。 下記のような場合です。

return [
    'gender' => [
                'value' => [
            'male' => 1,
            'female' => 2,
        ],
        'text' => [
            'male' => '男',
            'female' => '女',
        ],
    ],
];

このように値と文字列が意味を持って一緒に管理したい場合は、laravel-enumを使用すると良いと思います。laravel-enumについては、下記を確認してください。 [https://codelikes.com/use-laravel-enum/]

コメント