0

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

$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

4

3 回答 3

1

可选路由参数如下所示,

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

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

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

public function getOrderStatus(Request $reqeust, $orderId, $accountId = false)
于 2019-04-26T06:57:42.660 回答
0

将您的可选参数路由移出组外

$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-12-21T08:11:28.930 回答
-1

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

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

于 2019-04-26T09:51:04.617 回答