Php 控制器中带有Laravel 6个参数的奇怪行为
我在创建Laravel 6控制器时发现了一个奇怪的行为 我有两条路线叫Php 控制器中带有Laravel 6个参数的奇怪行为,php,laravel,Php,Laravel,我在创建Laravel 6控制器时发现了一个奇怪的行为 我有两条路线叫 Route::resource('role', 'RoleController')->middleware('verified'); Route::resource('category', 'MainCategoryController')->middleware('verified'); 两者都很好。 在这两个控制器中,我都有一个编辑方法 角色控制器 public function edit(Role $ro
Route::resource('role', 'RoleController')->middleware('verified');
Route::resource('category', 'MainCategoryController')->middleware('verified');
两者都很好。
在这两个控制器中,我都有一个编辑方法
角色控制器
public function edit(Role $role)
{
$permissions = Permission::get();
$users = User::get();
return view('roles.edit', compact('role', 'permissions', 'users'));
}
public function edit($mainCategory)
{
$mainCategory = MainCategory::findOrFail($mainCategory);
// dd($mainCategory);
return view('categories.edit', compact('mainCategory'));
}
主类别控制器
public function edit(Role $role)
{
$permissions = Permission::get();
$users = User::get();
return view('roles.edit', compact('role', 'permissions', 'users'));
}
public function edit($mainCategory)
{
$mainCategory = MainCategory::findOrFail($mainCategory);
// dd($mainCategory);
return view('categories.edit', compact('mainCategory'));
}
我的问题是,如果我使用in-MainCategoryController.edit as参数MainCategory$MainCategory它不会给我模型的数据,而是看起来像这样。在正常情况下,如果找不到模型,则路由到404
App\MainCategory {#471 ▼
#guarded: []
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#casts: []
#dates: array:1 [▶]
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
#forceDeleting: false
}
如果我像上面的函数那样要求模型数据,一切都很好。在RoleController.edit中,它工作正常,我得到了我要求的数据
我不知道为什么它是在角色中工作,而不是在主类别中
也许有人知道我在这里做错了什么,因为我无法找出我的错误。您的变量名必须与路由中的参数名匹配。如果您执行
php artisan route:list
,您将看到以下内容:
| GET|HEAD | category/{category}/edit | category.edit | App\Http\Controllers\MainCategoryController@edit | web |
这意味着您的控制器需要具有如下签名:
公共功能编辑(主类别$category)
{
dd(类别);
}
如果变量名不匹配(如您的情况),它将创建一个新实例,原因是:
公共功能编辑(MainCategory$MainCategory)
{
dd($maincegory);//App\maincegory的新实例
}
您可以阅读有关隐式绑定的更多信息:花一些时间来理解您的意思,但最终它帮助解决了我的问题。非常感谢你。