简体   繁体   中英

How to use optional route parameters properly with Laravel 5.6?

I am trying to create an API with Laravel 5.6, however, it seems to me that it's not possible to use optional route parameters before/after the parameter.

I'd like to achieve the following:

Route::get('api/lists/{id?}/items', 
[
    'as'    => 'api/lists/items/get', 
    'uses'  => 'ListsController@getListItems'
]);

With the above scenario, if I'm trying to visit api/lists/1/items it shows the page. On the other hand, if I'm trying to visit api/lists/items it says that the page is not found.

What I basically want is if there's no List ID specified, Laravel should fetch all the List ID's items, otherwise it should only fetch the specific ID's items.

Q: How is it possible to the optional parameter in between the 'route words'? Is it even possible? Or is there an alternative solution to this?

As far as I know, it's not possible to use optional parameters in the middle of your url.

You could try a workaround by allowing 0 for the optional parameter and loading all items in this case, as described here .

However, I'd recommend going with two different routes here to match everything you want:

api/lists/items
api/lists/{id?}/items

You have to give default value for optional parameter in the controller:

Route

Route::get('api/lists/{id?}/items', 'ListsController@getListItems');

ListsController

public function getListItems($id = null) {
    ---your code----
}

Reference

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM