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

Php 在Laravel中为GET和POST使用不同的控制器,但使用相同的名称,php,laravel,url-routing,laravel-5.1,laravel-routing,Php,Laravel,Url Routing,Laravel 5.1,Laravel Routing,我正在为web应用程序编写路由和控制器规则。在许多规则中,出现了一个问题,即我需要匹配GET和POST动词,并将它们发送给控制器,但方法不同 我考虑过使用Route::controller('tracking','TrackingController')来实现这一点,但是它需要为每个内部路由指定不同的名称,而我想为两者指定一个名称。除此之外,我只读过关于这个用法的负面评论,暗示这不是一个好主意 以下是我目前拥有的: Route::match(['get', 'post'], '/tracking

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

我考虑过使用
Route::controller('tracking','TrackingController')
来实现这一点,但是它需要为每个内部路由指定不同的名称,而我想为两者指定一个名称。除此之外,我只读过关于这个用法的负面评论,暗示这不是一个好主意

以下是我目前拥有的:

Route::match(['get', 'post'], '/tracking', [
    'as' => 'tracking',
    'uses' => 'TrackingController@index'
]);
在实现此功能时,我发现我需要两种控制器方法,
index
track
。如何有效地将
GET
路由到
index
POST
track
,同时保持相同的控制器(
TrackingController
)和相同的名称(
tracking


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

您可以轻松使用Route Controller,如下所示

Route::controller('tracking', 'TrackingController')
在这里,如果您想对get和post使用相同的方法,只需在方法中使用any前缀,如

//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';
});

实际上,拥有
Route::get
Route::post
是一种非常有说服力的方式,对于维护该应用程序的任何人来说,都是非常可读和容易理解的,因为这是自文档化的。如果你真的想做一些事情,你可能会考虑路由分组,但最终还是会有两条路线,<代码>获取<代码> > <代码> POST <代码> @ GladToHelp,路由命名是什么?当有两条相同的路线时,我应该只说出其中一条吗?毕竟,这只是为了反向路由。我认为最好将两者都命名,然后在项目中使用路由名称来生成链接,因为这样可以简化应用程序的维护。假设您以后想更改uri,如果您只需在routes.php中进行更改,而不必在整个项目中进行搜索,那么就容易多了。@GladToHelp Righto,我现在已经完成了,它似乎可以按照我的要求工作。我真的没有想到给他们两个都命名会更容易。现在,我将GET
tracking
和POST
tracking.track
命名为GET
tracking
,这意味着我可以在以后需要时安全地更改它们。