Laravel将put / patch路由定义为相同的路由名称

时间:2014-12-05 13:10:55

标签: php laravel-4 routes

在Laravel中,使用路径资源快速生成大量路径非常方便:

Route::resource('things'ThingsController');

这将为CRUD操作生成所有必需的RESTful路由。其中一个是PUT / PATCH路由,可以定义如下:

PUT/PATCH things/{id} ThingsController@update things.update

我已经读过,最好明确定义每个路由而不是使用路由资源,但我如何定义上面的PUT / PATCH路由。我明白我能做到

Route::put('thing/{id}', ['as' => 'things.update']);

Route::patch('thing/{id}', ['as' => 'things.update']);

但是第二个会覆盖或冲突第一个允许things.update路由名称仅引用PUT或PATCH请求。如何显式创建由资源路由创建的组合PUT / PATCH路由?

2 个答案:

答案 0 :(得分:7)

经过繁琐的搜索,请尝试以下操作;

Route::match(array('PUT', 'PATCH'), "/things/{id}", array(
      'uses' => 'ThingsController@update',
      'as' => 'things.update'
));

这允许您通过动词数组限制请求。

或者您可以限制资源;

Route::resource('things', 'ThingsController',
        array(
           'only' => array('update'), 
           'names' => array('update' => 'things.update')
        ));

两者都应提供相同的结果,但请注意它们未经过测试。

答案 1 :(得分:0)

这对我有用

Route::match(['put', 'patch'],'thing/{id}', 'ThingsController@update');