Laravel.6においてレシピアプリを開発中です。
国別のユーザーごとのレシピを表示する機能を実装し、苦戦したので自分用にメモします。
前提として、usersにnational_idというカラムを持ちユーザー登録時にプルダウンで国籍が登録されるようにしています。
ルーティングを定義
web.php
Route::get('/recipes/{country_key}','RecipeController@country')->name('recipes.country');
Viewにプルダウンを表示
recipes/index.php
<form class="form-group" method="GET">
@csrf
<select type="text" class="form-control" name="national_id" onChange="location.href=value;">
@foreach(config('country') as $key => $value )
<option value="{{ route('recipes.country',['country_key' => $key]) }}">{{ $value }}</option>
@endforeach
</select>
</form>
ここでうまいことリンクに飛ばなくて苦戦。。。
aタグは使えてもforeachでうまく回せなさそうだったのでJSのonChangeを使って、optionのvalueをforeachで回してそれをonChangeでとってくるイメージ!
国の登録
config/country.php
<?php
return array(
'0' => '未選択',
'1' => 'アイスランド',
'2' => 'アイルランド',
'3' => 'アフガニスタン',
'4' => 'アメリカ合衆国',
'5' => 'アラブ首長国連邦',
'6' => 'アルゼンチン',
'7' => 'イギリス',
'8' => 'イスラエル',
'9' => 'イタリア',
'10' => 'イラク',
'11' => 'イラン',
'12' => 'インド',
,,,以下略(108か国登録)
コントローラーで実装
RecipeController.php
public function country(Request $request,$key)
{ $key = $request->route('country_key');
$users= User::where('users.national_id','=',$key)->get();
$user = \Auth::user();
return view('recipes.country',[
'title' => '各国のレシピ',
'key' => $key,
'users' => $users,
'user' => $user,
]);
}
$keyを飛んできたrouteからとってきて、userのnational_idと国のidが一致するユーザーを表示する。
そのユーザーのレシピやらレシピの詳細をbladeで表示させる予定。
この辺はとりあえず作ったので今後いじっていく。
感想
最初Seederでやろうと頑張ったが、断念。
configの便利さに感動しました。
初心者なのでまだまだ改善点はありそうですが、ひとまず実装できました。
意見、感想、改善点等あればよろしくお願いいたします。