【问题标题】:Route Model Binding Problem Does Not Seem To Be Working路由模型绑定问题似乎不起作用
【发布时间】:2022-01-11 09:43:46
【问题描述】:

我正在使用 Laravel 8,我在 Blade 制作了一张这样的表格:

<div class="card-body table-responsive p-0">
    <table class="table table-hover">
        <tr>
            <th>Username</th>
            <th>Email</th>
            <th>Role</th>
            <th>Actions</th>
        </tr>
        @foreach($roles as $role)
            @if(count($role->users))
                @foreach($role->users as $user)
                    <tr>
                        <td>{{ $user->name }}</td>
                        <td>{{ $user->email }}</td>
                        <td>{{ $role->name }} | {{ $role->label }}</td>
                        <td>
                            <form action="{{ route('levels.destroy'  ,$user->id) }}" method="post">
                                @method('DELETE')
                                @csrf

                                <div class="btn-group btn-group-xs">
                                    <a href="{{ route('levels.edit' ,$user->id) }}"  class="btn btn-primary">Edit</a>
                                    <button type="submit" class="btn btn-danger">Delete</button>
                                </div>
                            </form>
                        </td>
                    </tr>
                @endforeach
            @endif
        @endforeach
    </table>
</div>  
    

结果完美呈现:

但现在我遇到了 EditDelete 按钮的问题,我已将 $user-&gt;id 指定为这两个按钮的参数。

当我将鼠标悬停在按钮上时,我可以看到正确定义的用户 ID:

但是当涉及到使用路由模型绑定的编辑方法时,它没有找到用户:

public function edit(User $user)
    {
        dd($user->id); // return null
    }

但是,如果我不使用路由模型绑定并改为这样说:

public function edit($id)
        {
            dd($id); // return 1
        }

它正确显示了用户 ID!

我不知道为什么路由模型绑定在这里不起作用,所以如果您知道出了什么问题或如何解决此问题,请告诉我...

【问题讨论】:

  • 请分享您的用户编辑路线
  • 你能定义它的路由吗?
  • @BhargavRangani Route::resource('levels', LevelController::class);
  • @Chando Route::resource('levels', LevelController::class);
  • 你的路由是控制器中的关卡模型,你不能用用户模型访问

标签: php laravel laravel-8 route-model-binding


【解决方案1】:

您正在尝试访问在这种情况下不知道 id 是什么的用户模型,因此您应该使用 Get 将用户的 id 传递给编辑路由,方法是将其传递给 url 端点,所以现在你可以得到它了

public function edit($id)
    {
        dd($id); // return null
    }

或通过将其作为 POST 表单发送并得到它

public function edit(Request $request)
    {
        dd($request->id); // return null
    }

【讨论】:

    【解决方案2】:

    我看到 cmets,您的资源控制器名称与您的变量名称“$user”不匹配。

    你可以在 laravel 官方文档上查看 here

    在您的情况下,这可能会有所帮助;

    Route::resource('levels', LevelController::class)->parameters([
        'levels' => 'user'
    ]);
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2019-09-05
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2018-11-27
      • 2018-05-26
      相关资源
      最近更新 更多