路由类型资源 Laravel 8 中方法的默认参数
Posted
技术标签:
【中文标题】路由类型资源 Laravel 8 中方法的默认参数【英文标题】:Default parameter for methods in routing type resource Laravel 8 【发布时间】:2021-08-20 08:16:36 【问题描述】:我正在尝试根据文档将默认参数添加到资源路由:
我的代码如下:
Route::resource('flats', FlatsController::class)->parameters([
'index' => 'test_parameter',
'create' => 'test_parameter1',
'update' => 'test_parameter2'
]);
但不幸的是,在列出路由时,它总是像下面的屏幕截图一样:
请帮助指导我在什么时候犯了错误?
【问题讨论】:
它是正确的。如果你 dd($request->all()) 那么你会得到这些默认参数。 parameters 将覆盖路由参数名称。 据我所知,您正在尝试覆盖路由段或操作,但不是路由参数。路由参数是大括号中的参数。 @shaedrich 我知道你的意思,但我的目标是为索引函数添加一个参数,例如,这样调用它看起来像 index/parameter。我在 laracast 上找到了解决方案:laracasts.com/discuss/channels/laravel/routeresource-parameters 但它不起作用 那么哪条路由没有flat
参数呢?你忘了在你的照片中提到它吗?
【参考方案1】:
你有以下:
| Methods | route |
|-----------|-------------------------------------|
| POST | panel/investments/flats |
| GET/HEAD | panel/investments/flats |
| GET/HEAD | panel/investments/flats/create |
| GET/HEAD | panel/investments/flats/flat |
| PUT/PATCH | panel/investments/flats/flat |
| DELETE | panel/investments/flats/flat |
| GET/HEAD | panel/investments/flats/flat/edit |
由于唯一的参数是flat
,因此您只能将其重命名为per docs:
Route::resource('flats', FlatsController::class)->parameters([
'flat' => 'apartment'
]);
这会导致:
| Methods | route |
|-----------|------------------------------------------|
| POST | panel/investments/flats |
| GET/HEAD | panel/investments/flats |
| GET/HEAD | panel/investments/flats/create |
| GET/HEAD | panel/investments/flats/apartment |
| PUT/PATCH | panel/investments/flats/apartment |
| DELETE | panel/investments/flats/apartment |
| GET/HEAD | panel/investments/flats/apartment/edit |
【讨论】:
所以我不能像这样在资源路由中添加额外的参数:laracasts.com/discuss/channels/laravel/routeresource-parameters ? 添加额外参数和覆盖现有参数是两种截然不同的动物——据我所知,没有。以上是关于路由类型资源 Laravel 8 中方法的默认参数的主要内容,如果未能解决你的问题,请参考以下文章
如何将没有参数的 Laravel 路由重定向到具有默认参数的控制器方法?
路由资源更新和删除无法使用除存储 laravel 8 之外的多个角色