今週の小ネタ。
${ }
デフォルトの .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 ⇁ address
が MAIL_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
が取得できると。
おわりに
うーん、変数利用について特にコードが無い...
もう少し調べます...