【问题标题】:Laravel 6: named routes inside a folder doesn't get the user objectLaravel 6:文件夹内的命名路由没有获取用户对象
【发布时间】:2020-04-11 00:08:09
【问题描述】:

我在这个路径 app/Http/Controllers/Admin 中有一个带有默认编辑功能的 UsersController

public function edit(User $user)
{
    dd($user);
}

还有这条路线

Route::namespace('Admin')->group(function (){
   Route::get('adminUsers', 'UsersController@index')->name('adminUsers');
   Route::get('adminEditUser/{id}', 'UsersController@edit')->name('adminEditUser');
   Route::get('adminDeleteUser/{id}', 'UsersController@delete')->name('adminDeleteUser');

});

因此,所有控制器都在其前面获取“Admin”文件夹名称,而不是为每个控制器添加它。现在我有了这个观点

@foreach($users as $user)
      <tr>
          <td>{{ $user->name }}</td>
          <td>{{ $user->email }}</td>
          <td><a href="{{ route('adminEditUser', $user->id) }}" class="btn btn-sm btn-primary">Edit</a>
              <a href="{{ route('adminDeleteUser', $user->id) }}" class="btn btn-sm btn-primary">Delete</a></td>
      </tr>
@endforeach

编辑链接打开此网址

http://127.0.0.1:8000/adminEditUser/1

并且 $user 对象没有任何用户数据(id 为 1 的用户已经存在)

App\User {#1419 ▼
#fillable: array:3 [▶]
#hidden: array:2 [▶]
#casts: array:1 [▶]
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#visible: []
#guarded: array:1 [▶]
#rememberTokenName: "remember_token"
}

为什么会这样以及如何解决这个问题?

【问题讨论】:

    标签: laravel routes


    【解决方案1】:

    您的路由参数命名为id 而不是user。参数名称必须与您输入的类型提示相匹配,隐式路由模型绑定才能正常工作。

    Route::get('adminEditUser/{user}', 'UsersController@edit')->name('adminEditUser');
    

    现在它将匹配您拥有的方法签名:

    public function edit(User $user)
    

    在您的情况下,您只是获得了新 User 对象的依赖注入,而不是发生任何模型绑定。

    “Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称匹配路由段名称。”

    Laravel 6.x Docs - Routing - Route Model Binding - Implicit Binding

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2019-05-22
      相关资源
      最近更新 更多