【问题标题】:View Not Found While Trying To Use Route Model Binding尝试使用路由模型绑定时未找到视图
【发布时间】:2025-12-17 19:25:02
【问题描述】:

我想编辑用户,所以我将其添加为链接:

<a href="{{ route('users.edit', $user->name) }}" class="on-default edit-row">Edit</a>

在控制器处:

public function edit(User $user)
    {
        $roles = Role::where('slug', '!=', 'super-admin')->get();
        return view('admin.users.edit', compact('roles', 'user'));
    }

如您所见,我从User 模型中调用了$user,但现在问题是,它说:

404 |未找到

但是,如果我将 User $user 删除为 $id,它将正常工作!

那么这里出了什么问题?如何在此处正确使用路由模型绑定?

我非常感谢你们的任何想法或建议......

提前致谢。

【问题讨论】:

  • routes/web/php 文件中的路线是什么样的?

标签: php laravel laravel-8


【解决方案1】:

您必须将用户的 id 而不是用户名传递给您的路由。

<a href="{{ route('users.edit', $user->id) }}" class="on-default edit-row">Edit</a>

否则,如果您想使用用户名,您有两种选择

  1. 将 getRouteKeyName 添加到 user.php
public function getRouteKeyName()
{
    return 'name';
}
  1. 直接在您的 web.php 中自定义隐式路由模型绑定
Route::get('/users/{user:name}/edit', function (User $user) {
    // ...
});

【讨论】:

  • NICO 击败了我,所以我删除了我的。我要说的唯一一点是,您可以像 NICO 所说的那样传递 id 或整个模型 route('users.edit', $user)