You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Laravel自动移除路由资源参数名称末尾的s字符?

问题原因

Laravel 默认基于英语单复数转换规则处理资源路由的参数命名,会自动将资源名转为单数形式作为路由参数名。你使用的pays是法语名词(单复数同形),不符合英语转换规则,因此被错误切掉末尾的s转为pay参数。

修复方案

方案1:单独指定当前资源路由的参数名

在定义resource路由时链式调用parameters方法,手动指定参数名即可,修改路由代码为:

Route::resource('pays', PaysController::class)->parameters([
    'pays' => 'pays'
]);

修改后生成的路由参数就会变成{pays},可以直接和控制器参数名匹配。

方案2:全局配置单复同形名词规则

如果你有多个这类不符合英语单复数规则的名词,可以全局配置,避免每个资源都单独设置。
在app/Providers/AppServiceProvider.php的boot方法中添加如下代码:

use Illuminate\Support\Pluralizer;

public function boot()
{
    Pluralizer::uncountable('pays');
    // 其他需要设置的单复同形名词都可以在这里追加,比如Pluralizer::uncountable('xxx');
}

配置后Laravel会将pays识别为单复数同形的名词,所有和pays相关的资源路由都会自动生成{pays}参数,无需额外单独设置。

内容的提问来源于stack exchange,提问作者Nicolas R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:15:03