質問編集履歴

2 該当コード載せ忘れ

1h_m

1h_m score 19

2020/05/24 17:19  投稿

Laravel DBに保存した画像を表示したい
Laravelを学び始めた初心者です。
DBに画像を保存し、表示させたいのですが、エラーで先に進めません。
解決策をご提示いただきたいです。よろしくお願いいたします。
<開発環境>
OS mac10.15.4
php 7.4.5
Laravel 7.12.0
<実現したいこと>
editImage.blade.phpにてプロフィール画像を登録、DBに保存
mypage.blade.phpで登録した画像を表示
<発生しているエラー>
mypage.blade.phpにて、「プロフィール画像を編集する」を押すと、以下のエラー発生。  
Missing required parameters for [Route: updateImage] [URI: mypage/editImage/{id}].
以下が該当のコードです。
足りない情報あれば教えてください。よろしくお願いいたします。
mypage.blade.php
```
<h2>マイページ</h2>
   名前→{{auth()->user()->name}}
       プロフィール写真→<img src="{{ $read_image ?? '' }}" width="300" height="300">
<a href="{{ route('editImage', ['id' => auth()->user()->id]) }}">プロフィール画像を編集</a>
```
editImage.blade.php
```
@if ($errors->any())
   <div class="alert alert-danger">
       <ul>
           @foreach ($errors->all() as $error)
               <li>{{ $error }}</li>
           @endforeach
       </ul>
   </div>
@endif
<form action="{{ route('updateImage') }}" method="post" enctype="multipart/form-data">
@csrf
<input type="hidden" name="id" value="{{ auth()->user()->id }}">
   <div class="form-group">
       <label>プロフィール画像</label>
       <input type="file" name="image" class="form-control">
   </div>
   <button type="submit" class="btn btn-primary">登録する</button>
</form>
```
MypageController.php
```
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Auth;
class MypageController extends Controller
{
   //
   public function __construct()
   {
       $this->middleware('auth');
   }
   // }
   public function editImage($id)
   {
     
       return view('mypage.editImage', ['id' => $id] );
   }
   
   public function updateImage(Request $request)
   {       
       
       $validateData = $request->validate([
           'image' => 'required|image|mimes:JPEG,jpeg,JPG,jpg,PNG,png'
       ]);
       
       $id = $request->id;
       $user = User::where('id', Auth::user()->id)->find($request->id);
       $user->image = $request->image->store('public/images');
       $image = $user->image;
       $read_image = str_replace('public/', 'storage/',$image);
       dd($image);
       $user->save();
       
       return view('mypage.mypage', ['id' => $id, 'image' => $image, 'read_image' => $read_image]);
   }
}
```
web.php
```
Route::get('mypage/editImage/{id}', 'MypageController@editImage')->name('editImage');
Route::post('mypage/editImage/{id}', 'MypageController@updateImage');
Route::post('mypage/editImage/{id}', 'MypageController@updateImage')->name('updateImage');
```
  • Laravel

    5344 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Laravel 5

    3337 questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1 formのactionの記述をし忘れていましたので付け足したところ、新たにエラーが発生してしまいました。

1h_m

1h_m score 19

2020/05/24 17:17  投稿

Laravel DBに保存した画像を表示したい
Laravelを学び始めた初心者です。
DBに保存した画像を表示したいですが、表示されません。
DBに画像を保存し、表示させたいのですが、エラーで先に進めません。
解決策をご提示いただきたいです。よろしくお願いいたします。
<開発環境>
OS mac10.15.4
php 7.4.5
Laravel 7.12.0
<実現したいこと>
editImage.blade.phpにてプロフィール画像を登録、DBに保存
mypage.blade.phpで登録した画像を表示
<発生しているエラー>
mypage.blade.phpで画像を読み込むが404エラーが発生
Missing required parameters for [Route: updateImage] [URI: mypage/editImage/{id}].
<試した事、分かっている事>  
DBに画像URLは保存されています。  
storage/app/public/imagesファイルに画像パスは保存されています。  
php artisan storage:linkコマンドは実行済みです。  
 
画像のパスは$read_imageに格納しています。直後にdd($read_image)を出力すると画像パスが格納されていることが確認できています。  
以下が該当のコードです。
足りない情報あれば教えてください。よろしくお願いいたします。
mypage.blade.php
```
<h2>マイページ</h2>
   名前→{{auth()->user()->name}}
       プロフィール写真→<img src="{{ $read_image ?? '' }}" width="300" height="300">
<a href="{{ route('editImage', ['id' => auth()->user()->id]) }}">プロフィール画像を編集</a>
```
editImage.blade.php
```
@if ($errors->any())
   <div class="alert alert-danger">
       <ul>
           @foreach ($errors->all() as $error)
               <li>{{ $error }}</li>
           @endforeach
       </ul>
   </div>
@endif
<form action="" method="post" enctype="multipart/form-data">
<form action="{{ route('updateImage') }}" method="post" enctype="multipart/form-data">
@csrf
<input type="hidden" name="id" value="{{ auth()->user()->id }}">
   <div class="form-group">
       <label>プロフィール画像</label>
       <input type="file" name="image" class="form-control">
   </div>
   <button type="submit" class="btn btn-primary">登録する</button>
</form>
```
MypageController.php
```
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Auth;
class MypageController extends Controller
{
   //
   public function __construct()
   {
       $this->middleware('auth');
   }
   // }
   public function editImage($id)
   {
     
       return view('mypage.editImage', ['id' => $id] );
   }
   
   public function updateImage(Request $request)
   {       
       
       $validateData = $request->validate([
           'image' => 'required|image|mimes:JPEG,jpeg,JPG,jpg,PNG,png'
       ]);
       
       $id = $request->id;
       $user = User::where('id', Auth::user()->id)->find($request->id);
       $user->image = $request->image->store('public/images');
       $image = $user->image;
       $read_image = str_replace('public/', 'storage/',$image);
       dd($image);
       $user->save();
       
       return view('mypage.mypage', ['id' => $id, 'image' => $image, 'read_image' => $read_image]);
   }
}
```
web.php
```
Route::get('mypage/editImage/{id}', 'MypageController@editImage')->name('editImage');
Route::post('mypage/editImage/{id}', 'MypageController@updateImage');
```
```
  • Laravel

    5344 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Laravel 5

    3337 questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る