Search code examples
laravellaravel-5laravel-routing

Route::resource binding creates plural attribute routes (i.e. projects/{projects})


I am trying to set up a Route:resource for Series.

  • When I create individual get, post, patch and delete Routes it works as expected (e.g. GET series/${serie}).

  • However when I use Route::resource it creates plural attributes (e.g. GET series/${series}).

  • In the laracast that I am following it creates the singular (e.g. GET projects/${project}).

I can't figure out what I am missing.

This works:

Route::get('/series', 'SeriesController@index');
Route::get('/series/create', 'SeriesController@create');
Route::get('/series/{serie}', 'SeriesController@show');
Route::post('/series', 'SeriesController@store');
Route::get('/series/{serie}/edit', 'SeriesController@edit');
Route::patch('/series/{serie}', 'SeriesController@update');
Route::delete('/series/{serie}', 'SeriesController@destroy');

The route list is:

GET|HEAD | series                | App\Http\Controllers\SeriesController@index
POST     | series                | App\Http\Controllers\SeriesController@store
GET|HEAD | series/create         | App\Http\Controllers\SeriesController@create
GET|HEAD | series/{serie}        | App\Http\Controllers\SeriesController@show
PATCH    | series/{serie}        | App\Http\Controllers\SeriesController@update
DELETE   | series/{serie}        | App\Http\Controllers\SeriesController@destroy
GET|HEAD | series/{serie}/edit   | App\Http\Controllers\SeriesController@edit

This doesn't work:

Route::resource('series', 'SeriesController');

and produces this route list:

GET|HEAD | series                | App\Http\Controllers\SeriesController@index
POST     | series                | App\Http\Controllers\SeriesController@store
GET|HEAD | series/create         | App\Http\Controllers\SeriesController@create
GET|HEAD | series/{series}       | App\Http\Controllers\SeriesController@show
PATCH    | series/{series}       | App\Http\Controllers\SeriesController@update
DELETE   | series/{series}       | App\Http\Controllers\SeriesController@destroy
GET|HEAD | series/{series}/edit  | App\Http\Controllers\SeriesController@edit

Notice the plural form {series}. Why is this happening?


Solution

  • "Series" is the plural as well as the singular of the word, therefore the routes Laravel is generating are perfectly fine.

    If you have a look into Laravels pluralizer helper, you can even see that "series" is explicitely listed as uncountable: https://github.com/laravel/framework/blob/5.5/src/Illuminate/Support/Pluralizer.php#L49