奇怪的行为与拉拉维尔 6 控制器中的参数

  • 本文关键字:控制器 参数 php laravel
  • 更新时间 :
  • 英文 :


我在创建Laravel 6控制器时发现了一个奇怪的行为。

我有两条路线叫

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'));
}

我的问题是,如果我在 MainCategoryController.edit 中使用 in 作为参数MainCategory $mainCategroy它不会给我模型的数据,而是看起来像这样。在正常情况下,如果找不到模型是路由到404。

AppMainCategory {#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    | AppHttpControllersMainCategoryController@edit    | web        |

这意味着您的控制器需要具有如下签名:

public function edit(MainCategory $category)
{
dd($category);
}

如果您的变量名称不匹配,就像您的情况一样,它将由于依赖注入而创建一个新实例:

public function edit(MainCategory $mainCategory)
{
dd($mainCategory); // New instance of AppMainCategory
}

您可以阅读有关隐式绑定的更多信息:https://laravel.com/docs/6.x/routing#implicit-binding

最新更新