首页 > 解决方案 > laravel 在路由中中断参数名称

问题描述

在定义一个简单的以下路线后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()

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

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

这条路线为:

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

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

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 路由名称有限制吗?如何解决这个问题?

提前致谢

标签: laravel

解决方案


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

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

推荐阅读