Laravel 6:文件夹中的命名路由无法获取用户对象 [英] Laravel 6: named routes inside a folder doesn't get the user object
问题描述
我在此路径下有一个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:文件夹中的命名路由无法获取用户对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!