路由类型资源 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 之外的多个角色

如何为laravel中的所有路由添加默认参数

没有 id 的 Laravel 资源路由销毁(DELETE)

带有参数的 Laravel 资源导致其他路由抛出错误

在 Laravel 中为资源控制器添加新方法