Laravel:资源 Controller 将参数从 ID 更改为 Slug

标签 laravel parameters controller resources

在我的 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/

相关文章:

javascript - 使用 ng-show 的相同功能可以在 Angular JS 中加载一个 Controller ,但不能加载另一个 Controller

laravel - 在配置文件中使用 Config

C# 字节数组到图像不使用相同的字节数组

php - Laravel:排除对多对多关系的过滤

vb.net - 有什么方法可以将ParamArray值作为byRef处理,以便可以对其进行更新?

php - 如何在服务器中获取 curl header

c# - 有没有什么时候我应该将 ViewModel 传递到我的 Controller 的一个操作方法中?

javascript - AngularJS:在指令 Controller 中呈现 HTML

php - Laravel 注销,添加一个监听器

jquery - 如何从jquery中的blade模板获取数组?