在Laravel中使用不同的GET和POST控制器,但使用相同的名称


Using a different controller for GET and POST in Laravel but using the same name

我正在为一个web应用程序编写路由和控制器规则。在许多规则中,出现了一个问题,即我需要匹配GET和POST谓词,并将它们发送给控制器,但方法不同。

我考虑使用Route::controller('tracking', 'TrackingController'),但是它需要为每个内部路由指定不同的名称,而我想为两个指定一个名称。此外,我没有看到任何关于这种用法的负面意见,认为这不是一个好主意。

以下是我目前的记录:

Route::match(['get', 'post'], '/tracking', [
    'as' => 'tracking',
    'uses' => 'TrackingController@index'
]);

在实现这一点时,我发现我需要两个控制器方法,indextrack。如何有效地将GET路由到indexPOST路由到track,同时保持相同的控制器(TrackingController)和相同的名称(tracking)?

我考虑过使用两个单独的路由,例如Route::getRoute::post,但这感觉不是很有说服力。

你可以很容易地使用路由控制器,像这样

Route::controller('tracking', 'TrackingController')
这里的

如果你想对get和post使用相同的方法,只需在方法中使用任何前缀,比如

//for both get and post
public function anyUrl();
//only get
public function getUrl();
//only post
public function postUrl();

或者使用

Route::any('/url', function () {
return 'Hello World';
});