【问题标题】:Missing required parameters for [Route: Admin.update] [URI: Admin/{Admin}][Route: Admin.update] [URI: Admin/{Admin}] 缺少必需的参数
【发布时间】:2021-03-10 15:16:19
【问题描述】:

我得到了休闲错误。 Missing required parameters for [Route: Admin.update] [URI: Admin/{Admin}]. 只有当我评论edit.blade 的形式时它才会消失。我检查了我做错了什么,但找不到。

我还检查了我的 web.php,但我怀疑它是从那里传来的。

如果有人能看到错误,我会很高兴。

这是我的路线,

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\AdminController;

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::resource('Admin', AdminController::class);

这是我的管理员

<?php

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function edit(User $user)
    {

        $roles = Role::all();

        return view('Admin.edit', [ 'user' => $user, 'roles' => $roles]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\RedirectResponse
     */
    public function update(Request $request, User $user)
    {
//        $user->roles()->sync($request->roles);
//
//        return redirect()->route('Admin.index');
    }
}

这是我的编辑刀片。

@extends('layouts.app')

@section('content')

    <div class="admin-first-page">
        <div class="container">
            <h2>User edit page</h2>
            <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam amet aperiam blanditiis consequatur dolore id iste itaque nisi officia reiciendis! Distinctio dolor dolore doloremque esse impedit, iusto nostrum quidem vitae?</p>

            <form action="{{ route('Admin.update', $user) }}" method="post">
                    @method('PUT')
                    @csrf


                    @foreach($roles as $role)
                        <input type="checkbox" name="roles[]" value="{{$role->id}}">
                        <label>{{ $role->name }}</label>
                    @endforeach

                <button type="submit" class="btn btn-primary">
                    Update
                </button>
           </form>

        </div>
    </div>

@endsection

【问题讨论】:

  • 你能提供这条路线的路线定义吗?
  • @lagbox 我更新了帖子。
  • 以下答案的关键是知道Route::resource('Admin', AdminController::class); 创建了类似Route::get('/admins/{admin}/edit', [AdminController::class, 'edit'])-&gt;name('admins.edit'); 的路由,并注意占位符的名称是“admin”而不是“user”

标签: laravel


【解决方案1】:

您必须将 Controller 方法的类型提示参数与路由参数名称相匹配,在本例中为 Admin。所以你的edit 方法需要是:

public function edit(User $Admin)
{
    return view('Admin.edit', ['user' => $Admin, ...]);
}

目前,由于Admin$user 不匹配,您将获得一个不存在的User 模型实例作为依赖注入而不是路由模型绑定。因此,您将 null 值传递给 route 助手:

route(..., $user);

由于$user 是一个不存在的模型实例,它的“id”是null,你不能将nulls 传递给路由助手。

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2022-01-16
    • 2020-08-17
    相关资源
    最近更新 更多