0
0

【Laravel】.env値の取得時の挙動(調査中記事)

Posted at

今週の小ネタ。

${ }

デフォルトの .env を眺めてみると、以下のように ${} で囲まれたキーがありました。

.env
APP_NAME="Laravel"

MAIL_FROM_NAME="${APP_NAME}"

おや?と思ってこの値が何を指しているか確認。

$ php artisan config:show mail 
  mail .................................................................................  
  from ⇁ address ..................................................... hello@example.com  
  from ⇁ name .................................................................. Laravel  

この from ⇁ addressMAIL_FROM_NAME の値。
ちゃんと「Laravel」に置き換わってるじゃないですか!

使いたかったとこ

Docker を構築するとき、ポート番号をずらすために変数化しますよね。

docker-compose.yml
ports:
    - '${APP_PORT:-80}:80'

このとき APP_URL のポート番号も動的に変えないと、リンクなどが上手く動かないケースがあります。
そんなときも、この APP_PORT 変数を埋め込めば?

.env
APP_PORT=8080

APP_URL="http://localhost:${APP_PORT}"
$ php artisan config:show app
  app ..................................................................................  
  url ...................................................................... ${APP_PORT}

なんで?

実装を読む

実装を読むコーナー

それぞれの config 実装はこんな感じ。

'url' => env('APP_URL', 'http://localhost'),


'from' => [
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

どちらもただ env() を呼び出しているだけ。

    public static function get($key, $default = null)
    {
        return self::getOption($key)->getOrCall(fn () => value($default));
    }

うーんソースコードを読む

値の変換

こちらの getOption() にて、いくつかの変換をしている。

まず、値を小文字にした後に、以下のテーブルに一致した場合は、変換を行っている。

文字列値 変換後
「true」「(true)」 true
「false」「(false)」 false
「empty」「(empty)」 '' (空文字)
「null」「(null)」 null

次に "' を取り除いている。

この関数のお陰で、良い感じに .env が取得できると。

おわりに

うーん、変数利用について特にコードが無い...
もう少し調べます...

0
0
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
0
0