【问题标题】:Optional route parameters not working in Lumen 5.7可选路由参数在 Lumen 5.7 中不起作用
【发布时间】:2019-09-15 15:36:16
【问题描述】:

我已经定义了我的路由和控制器如下

$router->group(['prefix' => 'api/v1'], function ($router) {
    $router->group(
     ['middleware' => 'auth'], function() use ($router) {
     $router->get('/order/get-order-status/{order_id}[/{account_id}]'
                , [
                'uses' => 'Api\V1\OrderController@getOrderStatus'
                , 'as' => 'getOrderStatus'
                ]
     );
  });
});

下面是函数定义

public function getOrderStatus($orderId, $accountId = false)
{
   // my code goes here
}

这里的问题是,每当我从路由中跳过可选的account_id,然后将传递的order_id 分配给函数的第二个参数,即accountId。如果我通过两个参数,那么一切都按预期工作。我只是很困惑我的配置是否有问题或Lumen 本身与可选路由参数有问题?

假设我触发了http://localhost/lumen/api/v1/order/get-order-status/ORD1234,然后ORD1234 被分配给accountId,而“0”被分配给orderId

【问题讨论】:

标签: php laravel laravel-routing lumen laravel-route


【解决方案1】:

可选的路由参数如下所示,

$router->get('/order/get-order-status/{order_id}/{account_id?}' // see the ? mark

虽然我不确定为什么将 0 分配给 orderId,

通常,控制器方法的第一个参数是请求对象,因此您可以轻松识别请求包含哪些内容。

public function getOrderStatus(Request $reqeust, $orderId, $accountId = false)

【讨论】:

  • 我也尝试过你的方法,每当我使用“?”时,都会出现 404 错误。
  • 对不起,不需要方括号,即使我没有注意到,检查编辑的答案
【解决方案2】:

我认为您应该使用可选参数,例如

{account_id?} 而不是[/{account_id}]

【讨论】:

    【解决方案3】:

    将你的可选参数路由移到组外

    $router->group(['prefix' => 'api/v1'], function ($router) {
     $router->get('/order/get-order-status/{order_id}[/{account_id}]'
                , [
                ,'middleware' => 'auth',
                'uses' => 'Api\V1\OrderController@getOrderStatus'
                , 'as' => 'getOrderStatus'
                ]
     );
    

    或者像下面这样的代码

    $router->get('api/v1/order/get-order-status/{order_id}[/{account_id}]', 
                        ['uses' => 'Api\V1\OrderController@getOrderStatus',
                        'middleware' => 'auth',
                        'as' => 'getOrderStatus'
                        ]
             );
    

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 2016-01-26
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 2016-10-06
      • 2018-06-30
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多