【Laravel8系】.envに書いてcontrollerで内容を取得して変更に強くしてみる。

Laravel

はい、今回はLaravelを使う上で仕様変更に強くするためにもenvに書いてそれをcontrollerから取得してviewに渡そう!

ということをやっていきたいと思います。

全体的な流れとしては

  1. envに書き込む
  2. configファイルに書く
  3. controllerで取得してviewに渡す。

なぜ、controllerから直接envを見ないのか等も説明していきます!

参考ブログ
[https://kusumo-t.com/laravel6-config-constant/]

.envに書いていく

では環境変数を定義していきます。

ちなみに.envはプロジェクトの直下に置いてあるはずです。

yamaプロジェクトがあるとすると、"yama/.env"というところにあるはずです。

 yama/.env

 ENV_FRUITS=apple #変数名は大文字のスネークケースで書く
 ENV_TEST="this is test" #変数にスペースがある場合には""で囲む

はい、こんな感じで.envに適当に追加してみます。

次はconfigに書いてみましょう。

configファイルを書いていく

envは直で参照するべきではない。

ちなみにあえてenvを参照しないで作成します。

なぜならば、configurationキャッシュコマンドを使った際に、.envファイルを読み込めなくなります。

//以下のコマンドを使うと、.envファイルが読み込めなくなる
config:cache

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'),
]

?>

ほい、こんな感じで書いていきますね。

env()関数の引数

  1. .envの変数名
  2. 対象の変数がnullだった際に、代わりに入力される値

という意味で使われます。

もし、複数返したい場合には以下の感じで書いていきますね。

<?php

return[
    'fruits' => env('ENV_FRUITS', 'banana'),
    'test' => env('ENV_TEST', 'hello world'),
]

?>

ということで、controllerから参照してviewに渡してみましょう!

controllerでconfigファイルを取得してviewに渡す

public function envtest()
{
    $fruits = config('fruitsworld.fruits');
    return (compact('fruits'));
}

ほいほいconfig()関数を使います。

config()関数の引数は以下です。

  1. ファイル名
  2. key名

てな感じですね。

これでviewに渡すことができました!!!!

もし渡せているのかよくわからんかったら、以下でデバックして確認してみよう。

public function fruits()
{
    $fruits = config('fruitsworld.fruits');
    dump($fruits);
    return (compact('fruits'));
}

これでちゃんと参照できているのかなど、確認できます!

まとめ

はい、こんな感じでできるようになりました。

envに書いていくことで、変更にも強くできるかと思います。

システムを作る上では、変更しやすい、変更に強いというのを意識していきます。

コメント

タイトルとURLをコピーしました