はい、今回はLaravelを使う上で仕様変更に強くするためにもenvに書いてそれをcontrollerから取得してviewに渡そう!
ということをやっていきたいと思います。
全体的な流れとしては
- envに書き込む
- configファイルに書く
- controllerで取得してviewに渡す。
なぜ、controllerから直接envを見ないのか等も説明していきます!
参考ブログ↓
Table of Contents
.envに書いていく
では環境変数を定義していきます。
ちなみに.envはプロジェクトの直下に置いてあるはずです。
yamaプロジェクトがあるとすると、”yama/.env”というところにあるはずです。
yama/.env
ENV_FRUITS=apple #変数名は大文字のスネークケースで書く
ENV_TEST="this is test" #変数にスペースがある場合には""で囲む
Code language: PHP (php)
はい、こんな感じで.envに適当に追加してみます。
次はconfigに書いてみましょう。
configファイルを書いていく
envは直で参照するべきではない。
ちなみにあえてenvを参照しないで作成します。
なぜならば、configurationキャッシュコマンドを使った際に、.envファイルを読み込めなくなります。
//以下のコマンドを使うと、.envファイルが読み込めなくなる
php artisan config:cache
Code language: JavaScript (javascript)
configを経由して読み込むと、エラーがなくなります。
開発期間中にconfig:cacheコマンドを実行する場合は、設定ファイルの中で必ずenv関数だけを使用してください。設定ファイルがキャッシュされると、.envファイルはロードされなくなり、env関数の呼び出しはすべてnullを返します。
https://readouble.com/laravel/8.x/ja/helpers.html?header=env()
ということですので、configファイルを通して読み込みましょう。
configを利用
configの配下に新しいphpファイルを作っていきますね。(例のファイル名は適当…)
config/fruitsworld.php
<?php
return [
'fruits' => env('ENV_FRUITS', 'banana'),
]
?>
Code language: HTML, XML (xml)
ほい、こんな感じで書いていきますね。
env()関数の引数
- .envの変数名
- 対象の変数がnullだった際に、代わりに入力される値
という意味で使われます。
もし、複数返したい場合には以下の感じで書いていきますね。
<?php
return[
'fruits' => env('ENV_FRUITS', 'banana'),
'test' => env('ENV_TEST', 'hello world'),
]
?>
Code language: HTML, XML (xml)
ということで、controllerから参照してviewに渡してみましょう!
controllerでconfigファイルを取得してviewに渡す
public function envtest()
{
$fruits = config('fruitsworld.fruits');
return (compact('fruits'));
}
Code language: PHP (php)
ほいほいconfig()関数を使います。
config()関数の引数は以下です。
- ファイル名
- key名
てな感じですね。
これでviewに渡すことができました!!!!
もし渡せているのかよくわからんかったら、以下でデバックして確認してみよう。
public function fruits()
{
$fruits = config('fruitsworld.fruits');
dump($fruits);
return (compact('fruits'));
}
Code language: PHP (php)
これでちゃんと参照できているのかなど、確認できます!
まとめ
はい、こんな感じでできるようになりました。
envに書いていくことで、変更にも強くできるかと思います。
システムを作る上では、変更しやすい、変更に強いというのを意識していきます。