laravel Configフォルダを使ってoptionをスッキリさせたい!!

今回は初めての試みだったので理解するのに時間がかかりました・・・
viewファイルでselectを使用する際にもっとコンパクトにして見えやすくして尚且つ編集も簡単にしたい!と思いConfigにoption内容を格納する方法を紹介します。今後使うかもしれないやり方なので備忘録として登録します。

#はじめに
viewファイルにoptionを使用する際、下記の画面になっていると思います。optionの数が少ない場合は下記の画面で良いと思いますが都道府県などoptionが多い場合には見えづらいと思います。これをconfigフォルダに格納したいと思います。
![“スクリーンショット” 2021-02-27 13.13.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/c7a3f2e2-6878-5106-f80a-4f0414bc6796.jpeg)

#目標
スクショでこのようなプルダウンすると選択画面が出るようにしたいと思います。
![“スクリーンショット” 2021-02-27 12.18.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/2ccfe53a-0d6b-ddb6-8f96-84ff60b4e08f.jpeg)

#configフォルダを設定

新規ファイルを作成して下さい。下記のようにコードを編集して下さい。

```Config/category.php
<?php

return [
  '$language' => [
      ""=>"選択してください",
      'study1' => 'PHP',
      'study2' => 'RUBY',
      'study3' => 'JAVA',
      'study4' => 'HTML CSS',
      'study5' => 'JavaScript',
  ],
];
```

###連想配列
ここで連想配列を使います。文法とサンプルは以下になります。

```sample.php
//文法
$変数= ["key"=>"value"]

<?php
$fruits = ["apple" => "りんご", "lemon" => "れもん", "melon" => "メロン"];
$array = array_values($fruits);
print_r($array);
?>

```
###解説
keyは'study1'になります。valueは'PHP'になります。valueに記述することによってviewに表示させる文字列が表示されます。それを$languageと言う変数に格納してControllerに渡します。`変数に格納することにより要素を引き出して自由に扱うのが変数の役割`です。

#configをファサードで呼び出す

controllerの上に`use Illuminate\Support\Facades\Config;`を記述します。

```PostsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use App\Http\Requests\PostRequest;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
```

###ファサードの使い方 1
ファサード（facade、「入り口」）と言う意味になります。複雑なClassを簡単に呼び出すことができます。呼び出し方としては下記のスクショを参考にして下さい。
一番後ろに記述しているファサードというところでそのままコピペして設定をします。[ファサード公式HPはこちらで確認](https://readouble.com/laravel/6.x/ja/facades.html)
![“スクリーンショット” 2021-02-27 12.49.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/7df67fe2-a99f-774a-5a83-31faabf38647.jpeg)

```sample.php
//書き方の例
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
```

###ファサードの使い方 2
コントローラに記述します。今回は新規登録をするcreateに記述します。

```PostsController.php
public function create() {
        $study = Config::get('category.$language');

        return view('bulletin-boards.create',
        ['study' => $study,]);

    }
```

###解説

```
$study = Config::get('category.$language');
```

`Config::get`を記述することによりConfigフォルダを参照します。
`('category.$language')`Configフォルダのファイル名を指定して、ファイル名にあるどの変数を持っていくかを設定します。
`$study`と言う変数にまた格納します。これをviewファイルに表示させるようにします。


#変数をforeachで表示させる
最後にviewファイルで画面に表示させる作業をします。

```create.blade.php
<select type="text" class="form-control" name="category">
  @foreach($study as $studies)
    <option value="{{ $studies }}">{{ $studies }}</option>
  @endforeach
</select>
```
###解説 foreach
```
foreach (配列変数 as キー変数 => 値変数){
  実行する処理1;
  実行する処理2;
}
```
今回はforeachでoption内容を表示させるのに使います。キー変数 => 値変数は$studyと言う変数に格納しているので記述はしません。

```
@foreach($study as $studies)
```

###解説 selectとoption

```sample.html
<select name="example">
<option value="サンプル1">サンプル1</option>
<option value="サンプル2">サンプル2</option>
<option value="サンプル3">サンプル3</option>
</select>
```
nameに保存するカラム名を記述。
option valueで選択名を記述。今回はvalueを複製することはないのでここに$studiesと言う変数を持ってくる。

```create.blade.php
<select type="text" class="form-control" name="category">
  @foreach($study as $studies)
    <option value="{{ $studies }}">{{ $studies }}</option>
  @endforeach
</select>
```

#最後に
如何でしょうか?
今回、ファサードをConfigクラスから呼び出すのは初めてやってみました。他にもファサードを使ってクラスを呼び出しができるのでやってみます。