【问题标题】:How to use optional route parameters properly with Laravel 5.6?如何在 Laravel 5.6 中正确使用可选路由参数?
【发布时间】:2018-12-06 02:56:06
【问题描述】:

我正在尝试使用 Laravel 5.6 创建一个 API,但是,在我看来,在参数之前/之后无法使用可选的路由参数。

我想实现以下目标:

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

在上述情况下,如果我尝试访问api/lists/1/items,它会显示该页面。另一方面,如果我尝试访问api/lists/items,则表示找不到该页面。

我基本上想要的是,如果没有指定 List ID,Laravel 应该获取所有 List ID 的项目,否则它应该只获取特定 ID 的项目。

问: 'route words' 之间的可选参数怎么可能呢?甚至可能吗?或者有其他解决方案吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.6


    【解决方案1】:

    您必须为控制器中的可选参数提供默认值:

    路线

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

    列表控制器

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

    Reference

    【讨论】:

    • 此解决方案不起作用,因为甚至找不到路由。
    【解决方案2】:

    据我所知,在你的网址中间不能使用可选参数。

    您可以尝试一种解决方法,即允许可选参数为 0 并在这种情况下加载所有项目,如 here 所述。

    但是,我建议在这里使用两条不同的路线来匹配您想要的一切:

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

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多