在我的 Laravel 应用程序中,我使用的是普通路由,例如 GET、POST、PUT 以及所有带有各种 Controller 的路由。但随着申请的进展,routes/api.php
文件变得非常庞大。因此,我将使用“资源 Controller ”语法对其进行更改,以使代码更简洁。
但是,之前我可以使用 url 中的“token”或“slug”参数来获取数据,例如:show/{token} & show($token) 或 show/{slug} & show($slug ),但现在每当我尝试这些或任何其他参数时,我都会得到 404 not found
错误。因此,我只使用默认的“id”参数。
较早:
Route::get('/categories', 'CategoryController@index');
Route::get('/categories/{token}', 'CategoryController@show');
现在:
Route::resource('/categories', 'CategoryController');
有没有办法将默认的“id”参数更改为任何其他..?
最佳答案
对于资源路由,路由参数是单数形式的资源名称、第一个参数。
Route::resource('categories', 'CategoryController');
会给你一个路由参数
category
.你可以通过运行 php artisan route:list
看到这一点。并查看已定义的路线。如果要为资源使用不同的参数名称,也可以通过覆盖参数来实现:
Route::resource('categories', 'CategoryController')->parameters([
'categories' => 'something',
]);
现在使用的路由参数将是
something
.这仅与路由参数名称有关,与如何解析任何绑定(bind)无关,除非您为参数名称专门定义了显式路由模型绑定(bind)。
如果您使用隐式路由模型绑定(bind),您将在模型本身上通过
getRouteKeyName
定义用于绑定(bind)的字段。方法。 [在 Laravel 的下一个版本中,您将能够定义路由定义本身使用的字段。]Laravel 6.x Docs - Controllers - Resource Controllers - Naming Resource Parameters
Laravel 6.x Docs - Routing - Model Bindings - Implicit Route Model Binding
getRouteKeyName
关于Laravel:资源 Controller 将参数从 ID 更改为 Slug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137700/