【问题标题】:laravel break parameter name in routelaravel 在路由中中断参数名称
【发布时间】:2023-04-01 18:00:01
【问题描述】:

在定义一个简单的下面的路由到web.php之后:

Route::prefix('{language}')->middleware(['setLanguage'])->group(function () {
    Route::prefix('panel')->group(function () {
        Route::prefix('contactusmodule')->group(function () {
            Route::resource('contactUs', 'ContactUsController')->names('contactUs');
        });
    });
});

我尝试通过此代码获取路线名称:

request()->route()->parameters()

这里我的路由参数是:languagecontactUs 当我找到这个网址时:

http://127.0.0.1:8000/en/panel/contactusmodule/contactUs/3/edit

这条路线为:

route('contactUs.edit',[app()->getLocale(),$contact->id])

我应该得到languagecontactUs,但我得到了这个数组:

array:2 [
  "language" => "en"
  "contactU" => "3"
]

正如你在这个输出问题中看到的那样,contactU 应该是contactUs

倾销路线的输出:

dd(request()->route()->getName(),request()->route()->parameters());


//output:

"contactUs.edit"

array:2 [▼
  "language" => "en"
  "contactU" => "3"
]

在我们的代码中,默认情况下我们应该从request()->route()->getName() 获取值。 laravel 路由名称有限制吗?如何解决这个问题?

提前致谢

【问题讨论】:

  • Route::resource 用于资源名称,它会自动将它们转换为所用参数名称的“单数”,contactUs 的单数(基于执行此操作的机制)是 contactU ...您可以为此路由定义禁用此功能,或者如果您愿意,可以明确定义参数的名称
  • @lagbox 谢谢,我该如何禁用它?

标签: laravel


【解决方案1】:

正如 lagbox 所说,这是由 Laravel 语法参数化导致的,它会自动将复数路由名称转换为单数变量名称。 Laravel 认为 contactUscontactU 的复数形式。如果您想使用contactUs 作为参数,只需通过添加->parameters() 方法来覆盖它,如下所示:

Route::resource('contactUs', 'Cms\Auth\LoginController')->names('contactUs')->parameters(['contactUs' => 'contactUs']);;

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多