Laravel 6:文件夹中的命名路由无法获取用户对象 [英] Laravel 6: named routes inside a folder doesn't get the user object

查看:87
本文介绍了Laravel 6:文件夹中的命名路由无法获取用户对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在此路径下有一个UsersController,具有默认的编辑功能

I'm having a UsersController in this path app/Http/Controllers/Admin with the default edit function

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"文件夹名称,而不是为每个控制器添加该名称.现在我有了这种看法

So all controllers get the "Admin" folder name before it instead of adding it for every controller. Now I have this view

@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

编辑链接将打开此URL

The edit link opens this url

http://127.0.0.1:8000/adminEditUser/1

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

And the $user object doesn't have any user data (user with id 1 already exists)

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"
}

那是为什么以及如何解决呢?

Why is that and how to solve this?

推荐答案

您的路由参数命名为id而不是user.参数名称必须与您键入的内容类型相匹配,以使隐式路由模型绑定起作用.

Your route parameter is named id not user. The parameter name has to match what you are type hinting for the Implicit Route Model Binding to work.

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

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

Now it will match the method signature you have:

public function edit(User $user)

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

In your case you were just getting Dependency Injection of a new User object instead of any Model Binding happening.

"Laravel自动解析在路径或控制器操作中定义的口才模型,其类型提示的变量名称与路径段名称匹配.

"Laravel automatically resolves Eloquent models defined in routes or controller actions whose type-hinted variable names match a route segment name."

Laravel 6.x文档-路由-路由模型绑定-隐式绑定

这篇关于Laravel 6:文件夹中的命名路由无法获取用户对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆