Laravelの便利機能configでプルダウンメニューやラジオボタンつくってみました!
今回は血液型を血液方のテーブルを作成せずに、Usersテーブル内で血液型データを保管したい!
テーブルをいっぱい作るのはイヤだ!という方のために書きました!
##configを使ってプルダウンメニューをつくろう!
####作業の流れ
1.configにプルダウンメニューに入れたいリストを作成。
2.Usersテーブルに専用カラムを作成
3.コントローラーで呼び出し、viewにデータを渡す。
4.viewで表示し、セレクトボックスで表示。選択後はそのデータを再度コントローラーに渡す。
5.コントローラにて選択されたデータをうけとる。(その後、DBに保存など行う)
6.DBに入れた数字に伴ったデータを取得
####1.configにプルダウンメニューに入れたいリストを作成。
作成する場所
Laravel->config->ここにファイル作成
プルダンメニューに表示させるものは下記のように配列でかきます!
<?php
return array(
'1' => 'A型',
'2' => 'B型',
'3' => 'AB型',
'4' => 'O型'
);
?>
```
####2.Usersテーブルに専用カラムを作成
まず、Userテーブルに血液型とついになっている数字が入るようなカラム作成をします。
カラム名には縛りがあります。
`/config/blood.php`のファイル名からもじる必要があります。
ファイル名が`blood.php`なら、カラム名は`blood_id`
また、この後にUserモデルに関数を書きますが、そこのメソッド名の命名法にも縛りがあります。
(6.にて説明)
####3.コントローラーで呼び出し、viewにデータを渡す。
``config('ファイル名')``で、さっき作成したプルダウンメニューが呼び出されます!
※ファイル名とはconfigディレクトリ内に作成したファイルの名前。今回だと**blood.php**なので、`config('blood') `となります!
その後は、いつも通りにコントローラーからビューへデータを飛ばします=33
```php:コントローラー
public function add() {
$blood_types = config('blood');
return view('viewの指定', compact('blood_types'));
}
```
####4.viewで表示し、セレクトボックスで表示。選択後はそのデータを再度コントローラーに渡す。
```view.blade.php
<select name="blood">
@foreach ($blood_types as $blood_type)
<option value="{{ $blood_type }}">{{ $blood_type }}</option>
@endforeach
</select>
####5.コントローラにて選択されたデータをうけとる
送信されたデータはコントローラーの$requestから取ってこれるんで、以下のように血液型のデータを取ってこれる。
dd($request->blood);
//(例)1
//A型を表す数字。DBに入れるデータはこの数字
この方法では、A型をあらわす1
をコントローラーで受け取れます!
####6.DBに入れた数字に伴ったデータを取得
どういうことかといいますと。
取得したのはA型を表す1
DBに保存されるデータも1
では、そのDBに保存されている1
からそうやってA型
というデータを取得すればいいのでしょうか?
今回はそのお話。
関数はget[ほにゃらら]Attribute()
で、[ほにゃらら]の部分になんの情報かわかるような単語を入れます。後にviewで使うので、何のデータかわかるような名前にした方が無難ですね。
今回はBloodType
でいきます!
public function getBloodTypeAttribute() {
return config('blood.'.$this->blood_id);
}
血液型:{{ $user->bloodType }} //A型
血液型:{{ $user->blood_id }} //1
##おまけ~configを使ってラジオボタンを実装!~
@foreach ($blood_types as $blood_type)
<ul style="list-style: none;">
<li><input type="radio" name="blood" value="{{ $blood_type }}">{{ $blood_type }}</li>
</ul>
@endforeach
<ul style="list-style: none;">
は<li>
によってリスト化した際に、冒頭の・
を消すコード。今回はラジオボタンなのであると邪魔なんで消しました。
また、コントロールでは$request->blood
でデータが取得できます!
以上になります!
これでconfigを使って、プルダウンメニューやラジオボタンを作成していただければ幸いです!
LGTM大好物なんで、ポチッと投げ銭感覚でおねがいします〜!