前提・実現したいこと
Laravelで掲示板の投稿内容を編集する機能をつけようとしています。
フォーム内容にプルダウンメニューがあるのですが、編集画面にユーザーが遷移した際にもともと入力していた内容をフォームの初期表示としたいです。
フォームのページはbladeファイルで作成しています。
例:
選択肢 → A, K, Q
編集前の投稿で選択していた項目 → K
編集画面のプルダウンメニューの初期入力内容 → K
発生している問題・エラーメッセージ
編集画面にユーザーが遷移した際、未選択の状態に(選択肢の一番上のものが選択された状態)なってしまいます。
例:
選択肢 → A, K, Q
編集前の投稿で選択していた項目 → K
編集画面のプルダウンメニューの初期入力内容 → A
該当のソースコード
現在、コード量を減らすためにforeach文でプルダウン内の選択肢を表示しています。
※bladeファイルの一部のみではlaravelの要素として、不足していたかと思われますのでソースコードを追加しています。
▼bladeファイル
php
1@csrf 2<div class="md-form"> 3 <label>タイトル</label> 4 <input type="text" name="title" class="form-control" required value="{{ $article->title ?? old('title') }}"> 5</div> 6<div class="form-group"> 7 8 9 <label>ハンド</label><br /> 10 <select name="rank"> 11 <?php 12 $rank = array('A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'); 13 foreach($rank as $rank){ 14 print('<option value="' . $rank . '">' . $rank . '</option>'); 15 } 16 ?> 17 </select> 18</div>
▼コントローラー
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Article; 7use App\Http\Requests\ArticleRequest; 8 9class ArticleController extends Controller 10{ 11 public function __construct() 12 { 13 $this->authorizeResource(Article::class, 'article'); 14 } 15 16 function index(){ 17 //@TODO 投稿一覧画面を表示 18 $articles = Article::all()->sortByDesc('created_at'); 19 return view("articles.index", [ 20 "articles" => $articles 21 ]); 22 } 23 24 //投稿処理を行う 25 function create(Request $request){ 26 return view('articles.create'); 27 } 28 29 //新規作成処理 30 public function store(ArticleRequest $request, Article $article) 31 { 32 $article->fill($request->all()); 33 $article->user_id = $request->user()->id; 34 $article->save(); 35 return redirect('articles.index'); 36 } 37 38 //編集処理 39 public function edit(Article $article) 40 { 41 return view('articles.edit', ['article' => $article]); 42 } 43 44 //更新処理 45 public function update(ArticleRequest $request, Article $article) 46 { 47 $article->fill($request->all())->save(); 48 return redirect()->route('articles.index'); 49 } 50 51 //記事削除処理 52 public function destroy(Article $article) 53 { 54 $article->delete(); 55 return redirect()->route('articles.index'); 56 } 57 58 //詳細表示処理 59 public function show(Article $article) 60 { 61 return view('articles.show', ['article' => $article]); 62 } 63}
▼モデル
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $fillable = [ 'title', 'rank', ];
試したこと
webで調べて、以下のように「もし$_POST[‘rank’]のvalue(値)がPOSTされていて、かつAであればselectedをechoせよ。もし空であれば ” をechoせよ。」といった意味の記述をしてみましたが、変化がありませんでした。
※ここで試したことは以下のサイトを参考にしておりました。
http://webukatu.com/blogs/butterfly_engineer/2019/08/04/%E3%80%90php%E3%80%91select%E3%82%BF%E3%82%B0%E3%81%AE%E9%81%B8%E6%8A%9E%E5%86%85%E5%AE%B9%E3%81%AE%E4%BF%9D%E6%8C%81/#i-2
▼bladeファイル
php
1<select name="rank"> 2<option value="A" <?php echo array_key_exists('rank', $_POST) && $_POST['rank'] == 'A' ? 'selected' : ''; ?>>A</option> 3<option value="K" <?php echo array_key_exists('rank', $_POST) && $_POST['rank'] == 'K' ? 'selected' : ''; ?>>K</option> 4//以下略
補足情報(FW/ツールのバージョンなど)
・ソースコード欄にコントローラーとモデルを追加しております
・「試したこと」内に参照サイトのリンク先を追加しております
編集・追記依頼に対してお応えしたつもりではありますが、もしまだ不足店があればお伝えいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー