Laravel Routing:仅将前缀变量用于中间件

时间:2019-01-07 23:23:51

标签: laravel routing

在Laravel网站中,我们有两个要解决的新要求。 1 /每个API调用都需要带有一个参数,该参数指示调用是在TEST中还是在LIVE数据中(如果您熟悉的话:类似于Stripe允许您从实时数据转换为测试数据,反之亦然) 2 /我们现在需要支持1个用户才能访问多个帐户。

因此,基本上,我们所有的API URL现在都应以:

/api/test/123/...

我们使用路由prefixing功能为所有路由定义我们的前缀,如下所示:

Route::group(
    ['prefix' => '/api/{api_modus}/{api_account}'],
    function($router) {
        Route::get('invoices', 'InvoiceController@index');
        Route::get('invoices/{id}, 'InvoiceController@view')
    }
);

这基本上会创建以下路线:

GET /api/{api_modus}/{api_account}/invoices
GET /api/{api_modus}/{api_account}/invoices/{id}

我们成功创建了用于设置请求的中间件,并在中间件中设置了api_modus和api_account;我们基本上使用$request->route('api_modus')来获取api_modus路由参数,并在中间件中执行我们需要做的任何事情。

现在是棘手的部分。由于我们在前缀中设置的两个参数基本上是我们在控制器方法中不需要的通用参数,因此我们在传递参数方面遇到了问题。

发票路线示例是一个错误的示例,因为我可能会在controller方法中键入$ invoice参数,在这种情况下,我希望它运行良好,但是我遇到了以下Controller方法的问题:

InvoiceController {
    public function view($id, Request $request) {
        dd($id);
    }
}

在访问路线/api/test/123/invoices/456时,我基本上希望看到dd($id)输出值456。不幸的是,相反,我们获得了值test,因为Laravel似乎按照在路径中看到它们的顺序沿参数传递,并且似乎与{id }更改为在控制器方法中定义的$ id参数名。

有什么办法可以解决此问题?

我不想通过添加用于捕获api_modus和api_account值的参数来使控制器方法变脏,因为它们将不会在方法中使用...

非常感谢您可能提出的任何建议!

0 个答案:

没有答案