Laravel 具有两个参数的资源控制器

Laravel 具有两个参数的资源控制器,laravel,Laravel,我有一个由两个参数定义的资源(在现实世界中)。让我们以汽车为例:我想要一个可访问的资源,如下所示: /cars/{model}/{make} 我知道我可以为此创建一个控制器和指向它的路由,但我不知道如何使用资源路由执行此操作: Route::resource('/cars', 'CarController'); 这将仅使用一个参数创建管线: GET/HEAD cars App\Http\Controllers\CarController@index POST

我有一个由两个参数定义的资源(在现实世界中)。让我们以汽车为例:我想要一个可访问的资源,如下所示:

/cars/{model}/{make}
我知道我可以为此创建一个控制器和指向它的路由,但我不知道如何使用资源路由执行此操作:

Route::resource('/cars', 'CarController');
这将仅使用一个参数创建管线:

GET/HEAD  cars            App\Http\Controllers\CarController@index
POST      cars            App\Http\Controllers\CarController@store
GET/HEAD  cars/new        App\Http\Controllers\CarController@create
GET/HEAD  cars/{car}      App\Http\Controllers\CarController@show
PUT/PATCH cars/{car}      App\Http\Controllers\CarController@update
DELETE    cars/{car}      App\Http\Controllers\CarController@destroy
GET/HEAD  cars/{car}/edit App\Http\Controllers\CarController@edit
其中,
{car}
参数指的是数据库密钥

是否可以使用两个参数
{make}
{model}
创建资源路由(如果是:如何创建)

还是必须手动创建所有路线

如果有什么不同的话,我用的是Laravel5.5

明确地说,我想以以下内容结束:

GET/HEAD  cars                     App\Http\Controllers\CarController@index
POST      cars                     App\Http\Controllers\CarController@store
GET/HEAD  cars/new                 App\Http\Controllers\CarController@create
GET/HEAD  cars/{make}/{model}      App\Http\Controllers\CarController@show
PUT/PATCH cars/{make}/{model}      App\Http\Controllers\CarController@update
DELETE    cars/{make}/{model}      App\Http\Controllers\CarController@destroy
GET/HEAD  cars/{make}/{model}/edit App\Http\Controllers\CarController@edit
edit
功能(例如)将如下所示:

public function edit(string $make, string $model) {
    // sort out DB entry and provide it to a view
}

资源路由不希望以这种方式设置。您可以使用嵌套资源,但这仍然会在您想要的参数之间添加一段

自己定义路线<代码>路由::资源只注册7条路由,您可以自己明确注册

我能得到的最接近的结果是:

Route::resource('cars.model', 'CarsController', [
    'parameters' => ['cars' => 'make']
]);

cars/{make}/model/{model}

资源路由不希望以这种方式设置。您可以使用嵌套资源,但这仍然会在您想要的参数之间添加一段

自己定义路线<代码>路由::资源只注册7条路由,您可以自己明确注册

我能得到的最接近的结果是:

Route::resource('cars.model', 'CarsController', [
    'parameters' => ['cars' => 'make']
]);

cars/{make}/model/{model}

也许你可以添加一个trait,在汽车上查找相应的make、model组合?这里的问题不是查找模型,而是从一个(用户友好的)url到控制器上获取参数。我理解这一点,但因为你不想输入7次额外的参数声明(如果这是唯一的控制器,这应该不会有任何问题)我想说的是,你可以创建一个可以在这种情况下重复使用的函数。你能在回答中详细说明这个想法,并给出一些如何实现的建议吗?我还不知道这个特性是如何/在哪里被使用的,在routes/web.php文件中只有一个声明。键入7个routes out确实不是什么大问题,但我希望该文件能够正确可读性好。拥有一个单一的资源路由会传达“这是一个常规资源”。仔细想想:与其编写
公共函数编辑(string$make,string$model){
不如使用一个函数在控制器内组合它们:
getcar($request){return lookup($request->model,$request->make)}
也许你可以添加一个trait,在汽车上查找相应的make、model组合?在这里查找模型不是问题,而是从一个(用户友好的)url到控制器上获取参数。我理解这一点,但因为你不想输入额外的参数声明7次(如果这是唯一的控制器,这应该不会有任何问题)我想说的是,你可以创建一个可以在这种情况下重复使用的函数。你能在回答中详细说明这个想法,并给出一些如何实现的建议吗?我还不知道这个特性是如何/在哪里被使用的,在routes/web.php文件中只有一个声明。键入7个routes out确实不是什么大问题,但我希望该文件能够正确可读性好。拥有一个单一的资源路由会传达“这是一个常规资源”。仔细想想:与其编写
公共函数编辑(string$make,string$model){
不如使用一个函数在控制器内组合它们:
getcar($request){return lookup($request->model,$request->make)}
虽然这些文档没有给出实现的方法,但它们也没有明确表示它无法工作。看到你的这种想法,我就认为需要手动路径。谢谢。除非有人提出其他方法,否则我会投票给你……是的,文档没有说你可以创建自己的
ResourceRegister
,并使用它创建注册资源路由时所需的任何uri格式。由于额外的段,嵌套资源确实不是可行的方法。扩展
resourceRegistrator
似乎仅此项目的学习曲线太陡(特别是因为我找不到任何关于扩展内容和开始位置的文档/指针)。我将使用七条路线声明,并添加一条注释,说明为什么它不是一条资源声明。虽然文档没有给出执行方法,但它们也没有明确表示它无法工作。看到您这样做,证实了我的期望,即需要手动路线。谢谢。除非有人提出其他建议,否则您有我的投票权…y是的,文档没有说您可以创建自己的
ResourceRegistrator
,并使用它来创建注册资源路由时所需的任何uri格式。嵌套资源确实不是一种方法,因为有额外的段。扩展
ResourceRegistrator
对于这个项目来说,学习曲线似乎太陡了ect本身(特别是因为我找不到任何关于扩展什么以及从何处开始的文档/指针)。我将使用七个路由声明,并添加一条注释,说明为什么它不是一个资源声明。