You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10报错:resto.show路由缺少必填参数

Laravel食品菜单详情页跳转错误排查与解决

错误信息

Missing required parameters for [Route: resto.show] [URI: resto/{resto}]. (View: /vagrant/site/resources/views/resto/index.blade.php)

控制器代码(FoodController)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Food;
use Illuminate\Support\Composer;

class FoodController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('resto.index' , [
            'foods' => Food::all()
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('resto.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
           'food_name' => 'required ' ,
            'food_price' => 'required'
        ]);

        $food = new Food();

        $food->name = strip_tags($request->input('food_name'));
        $food->price = strip_tags($request->input('food_price'));

        $food->save();

        return redirect()->route('resto.index');
    }

    public function show($id)
    {
        return view('resto.show' , [
           'food' => Food::find($id)
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

路由配置(web.php)

Route::get('/' , [PageController::class , 'index'])
    ->name('home.index');
Route::get('about' , [PageController::class , 'about'])
    ->name('home.about');
Route::get('contact' , [PageController::class , 'contact'])
    ->name('home.contact');
Route::resource('resto' , 'FoodController');

Blade视图文件

index.blade.php

@extends('layout')
@section('title', 'Computers')

@section('section')
    <div class="title m-b-md">
        Computers Page
    </div>
    <div class="mt-5">
        @if(count($computers) > 0)
            <ul>
                @foreach($computers as $computer)
                    <a href="{{ route('computers.show' , ['computer' => $computer['id']]) }}">
                        <li>{{ $computer['name'] }} = {{ $computer['ram'] }} </li>
                    </a>
                @endforeach
            </ul>
        @else
            <h3>No Computers</h3>
        @endif
    </div>
@endsection

show.blade.php

@extends('main')
@section('title', 'Food page')

<style>
    li:hover {
        text-decoration: underline;
        cursor: pointer;
    }
</style>

@section('section')
    <div class="title m-b-md">
        Laravel
    </div>
    <p>{{ $food['name'] }}</p>
@endsection

问题分析与解决步骤

错误根源在于resto/index.blade.php的内容完全和食品菜单业务不匹配,存在以下几个问题:

  • 控制器传递的变量是$foods,但视图里使用的是$computers,无法正常遍历食品数据
  • 视图里调用的是computers.show路由,而实际配置的资源路由是resto.show,参数名也对应错误
  • 视图内的标题、展示字段(如ram)都和食品业务无关

修正后的index.blade.php代码

@extends('layout')
@section('title', '食品菜单')

@section('section')
    <div class="title m-b-md">
        食品菜单页面
    </div>
    <div class="mt-5">
        @if(count($foods) > 0)
            <ul>
                @foreach($foods as $food)
                    <a href="{{ route('resto.show' , ['resto' => $food->id]) }}">
                        <li>{{ $food->name }} - ¥{{ $food->price }}</li>
                    </a>
                @endforeach
            </ul>
        @else
            <h3>暂无食品</h3>
        @endif
    </div>
@endsection

额外优化建议

  • 控制器show方法中,建议用findOrFail()替代find(),当ID不存在时会返回标准404页面,更符合Laravel最佳实践:
    public function show($id)
    {
        return view('resto.show' , [
           'food' => Food::findOrFail($id)
        ]);
    }
    
  • 统一视图布局文件:index.blade.php使用layout,show.blade.php使用main,建议保持一致避免布局混乱

内容的提问来源于stack exchange,提问作者Abdulrahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:48:09