Laravelで作成したトップページでのパラメーターエラーについて
解決したいこと
ここに解決したい内容を記載してください。
Laravelを使ってフリーマーケットサイトを作成しています。
そのサイトのトップページに飛ぶ際に毎回、リンク先として書いているshow.blade関連でパラメーターのエラーが出てしまい、一度違うページに飛んでからトップページに飛ばないといけない状態です。
既にログイン関連のルートは書き終えています。
トップページはログインしないと飛べない状態にしたいです。
ログイン前にトップページに飛んだ際に、ログイン用のページに飛ぶようにしたいです。
発生している問題・エラー
Missing required parameters for [Route: profile.show] [URI: profile/{profile}]. (View: /home/ec2-user/environment/laravel_market/resources/views/layouts/top.blade.php)
### 該当するソースコード
```web.php(ルーティング)
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Auth::routes();
Route::get('/', function () {
return view('layouts.top');
});
// お気に入り一覧
Route::resource('likes', 'LikesController')->only([
'index', 'store', 'destroy'
]);
Route::resource('items', 'ItemsController');
Route::resource('profile', 'ProfileController')->only([
'store', 'destroy'
]);
Route::get('users/{id}/exhibitions', 'ItemsController@exhibitions');
Route::get('items/create', 'ItemsController@create');
Route::post('items', 'ItemsController@store');
Route::get('/profile/{id}/edit', 'ProfileController@edit')->name('profile.edit');
Route::patch('/profile/{id}', 'ProfileController@update')->name('profile.update');
Route::get('/profile/{id}/edit_image', 'ProfileController@editImage')->name('profile.edit_image');
Route::patch('/profile/{id}/edit_image', 'ProfileController@updateImage')->name('profile.update_image');
Route::resource('profile', 'ProfileController')->only([
'show',
]);
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Items;
use App\Http\Requests\ProfileRequest;
use App\Http\Requests\ProfileImageRequest;
use App\Services\FileUploadService;
class ProfileController extends Controller
{
// プロフィール
public function show($id)
{
$user = User::find($id);
return view('profile.show', [
'title' => 'プロフィール',
'user' => $user
]);
}
public function edit(int $id)
{
$user = User::find($id);
return view('profile.edit',[
'title' => 'プロフィール編集',
'user' => $user,
]);
}
public function update(int $id, UserRequest $request){
$user = User::find($id);
$user->update($request->only(['name', 'profile']));
session()->flash('success', 'プロフィールを編集しました!');
return redirect()->route('profile.show', $id);
}
public function editImage($id)
{
$user = User::find($id);
return view('profile.edit_image', [
'title' => 'プロフィール画像変更画面',
'user' => $user,
]);
}
public function updateImage($id, ProfileImageRequest $request, FileUploadService $service)
{
//画像投稿処理
$path = '';
$image = $request->file('image');
if(isset($image) === true){
// publicディスク(storage/app/)のphotosディレクトリに保存
$path = $image->store('photos', 'public');
}
$user = User::find($id);
// 変更前の画像の削除
if($user->image !== ''){
// publicディスクから、該当の投稿画像($user->image)を削除
\Storage::disk('public')->delete(\Storage::url($user->image));
}
$user->update([
'image' => $path, //ファイル名を保存
]);
session()->flash('success', '画像を変更しました!');
return redirect()->route('profile.show', $id);
}
private function saveImage($image){
// 画像投稿処理
$path = '';
if(isset($image) === true ){
// publicディスク(storage/app/)のphotosディレクトリに保存
$path = $image->store('photos', 'public');
}
return $path;; // 画像が存在しない場合は空文字
}
// いいね追加処理
public function store(Request $request)
{
//
}
// いいね削除処理
public function destroy($id)
{
//
}
}
@extends('layouts.default')
@section('header')
<header>
<ul class="header_nav">
<li>
<a href="/">
Market
</a>
</li>
<li>
<a href="{{ route('profile.show', Auth::id()) }}">
プロフィール
</a>
</li>
<li>
<a href="/likes/index">
お気に入り一覧
</a>
</li>
<li>
<a href="/users">
出品商品一覧
</a>
</li>
<form action="{{ route('logout') }}" method="POST">
@csrf
<input type="submit" value="ログアウト">
</form>
</ul>
</header>
@endsection
自分で試したこと
ルーティングの見直し、パラメーターの渡し方