Laravelで、画像の投稿機能を備えたサービスを開発中です。
画像を1枚だけの送信であれば、その1枚はビュー側で正常に表示されるんですが、画像を複数枚(上限10枚)送信したとき、ビュー側での表示のさせ方(書き方)がわかりません。
リクエストの中には複数枚入っているんですが、どのようにしたら複数枚表示されるようになりますか?
エラーがこのように出ています。
「Cannot use [] for reading」
show.blade.php(フォームで入力した情報が表示されるページ
html
1 @if ($lecture->image) 2 <figure class="show_post_thumbnail"><div class="new_area-img text-center"><img class="show_image" src="{{ asset('storage/'.$lecture->image) }}"></div></figure> 3 @elseif ($lecture->image >= count(2) && $lecture->image < count(11)) 4 <figure class="show_post_thumbnail"><div class="new_area-img text-center"><img class="show_image" src="{{ asset('storage/'.$lecture->image[]) }}"></div></figure> 5 @else 6 <figure class="show_post_thumbnail"><div class="new_area-img text-center"><img src="../img/noimage.gif"></div></figure> 7 @endif
ちなみに、コントローラーで、
受け取った image を $files として代入し、それの一つ一つにパスを割り当てた後にセーブしているので、画像を複数枚送信したとしても、最終的には1つしか画像が残らないというような記述になっているのかもしれないのですが、やはり書き方がおかしいでしょうか?
LecturesController
PHP
1public function store(Request $request) { 2 3 $this->validate($request, [ 4 'category_name' => 'required', 5 'title' => 'required|max:100', 6 'content' => 'required', 7 ]); 8 9 if ($request->hasFile('image') ) { 10 $lecture = new Lecture; 11 12 $lecture->user_id = \Auth::id(); 13 $lecture->category_name = $request->category_name; 14 $lecture->title = $request->title; 15 $lecture->content = $request->content; 16 17 $files = $request->file('image'); 18 19 // foreach で $files に入った画像を $file として別個に取り出す 20 foreach ($files as $file) { 21 22 // UNIXタイムスタンプを取得したものと、ユーザーID、オリジナルの拡張子を取得したものとを繋ぎ、ファイル名として $filename に代入 23 $filename = time() . '_' . $lecture->user_id . '.' . $file->getClientOriginalExtension(); 24 25 // storeAs の第1引数は storage からのパス、第2引数はファイル名、第3引数は利用するストレージ(local、public…など) 26 $path = $file->storeAs('', $filename, ['disk' => 'public']); 27 28 // パスを image カラムに代入 29 $lecture->image = $path; 30 31 // 最終的な状態を保存 32 $lecture->save(); 33 } 34 } 35 else { 36 $request->user()->lectures()->create([ 37 'category_name' => $request->category_name, 38 'title' => $request->title, 39 'content' => $request->content, 40 ]); 41 } 42 43 return redirect('/'); 44 }
create.blade.php(フォーム)
html
1<div class="form-group"> 2 <label class="font-weight-bold">画像</label> 3 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 4</div> 5<div class="form-group"> 6 <label class="font-weight-bold">画像</label> 7 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 8</div> 9<div class="form-group"> 10 <label class="font-weight-bold">画像</label> 11 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 12</div> 13<div class="form-group"> 14 <label class="font-weight-bold">画像</label> 15 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 16</div> 17<div class="form-group"> 18 <label class="font-weight-bold">画像</label> 19 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 20</div> 21<div class="form-group"> 22 <label class="font-weight-bold">画像</label> 23 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 24</div> 25<div class="form-group"> 26 <label class="font-weight-bold">画像</label> 27 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 28</div> 29<div class="form-group"> 30 <label class="font-weight-bold">画像</label> 31 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 32</div> 33<div class="form-group"> 34 <label class="font-weight-bold">画像</label> 35 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 36</div> 37<div class="form-group"> 38 <label class="font-weight-bold">画像</label> 39 <input type="file" name="image[]" class="form-control-file" multiple="multiple"> 40</div>
以上、詳しい方よろしくお願いいたしますm(_ _)m
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 05:45 編集
2020/06/18 06:02
2020/06/18 06:07
2020/06/18 06:13
2020/06/18 06:29