资源控制器有两个参数

时间:2017-11-20 09:22:16

标签: laravel

我有一个资源,由两个参数定义(在现实世界中)。让我们以汽车类比:我喜欢可访问的资源如下:

/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}(如果是:如何)创建资源路径?

或者我是否必须手动创建所有路线?

我使用Laravel 5.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
}

1 个答案:

答案 0 :(得分:0)

资源路由不希望以这种方式设置。您可以执行嵌套资源,但仍会在参数之间添加一个段。

自己定义路线; Route::resource只需注册7条路线,您可以随时自行注册。

我最接近的是:

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

cars/{make}/model/{model}