【问题标题】:Remove HTTP methods in Laravel routes删除 Laravel 路由中的 HTTP 方法
【发布时间】:2015-11-24 00:26:28
【问题描述】:

我正在使用 Laravel 资源路由(通过控制器)。这是路由代码

Route::resource( 'difficulty', 'DifficultyController', [ 'only' => [ 'index', 'show', 'update', 'create' ] ] );

这是创建的路线

+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+
| Domain | Method   | URI                     | Name              | Action                                           | Middleware |
+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+
|        | GET|HEAD | difficulty              | difficulty.index  | App\Http\Controllers\DifficultyController@index  |            |
|        | GET|HEAD | difficulty/create       | difficulty.create | App\Http\Controllers\DifficultyController@create |            |
|        | PATCH    | difficulty/{difficulty} |                   | App\Http\Controllers\DifficultyController@update |            |
|        | GET|HEAD | difficulty/{difficulty} | difficulty.show   | App\Http\Controllers\DifficultyController@show   |            |
|        | PUT      | difficulty/{difficulty} | difficulty.update | App\Http\Controllers\DifficultyController@update |            |
+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+

它工作正常,除了我不需要“HEAD”和“PATCH”方法并且我想删除它们。因此列出路线将显示以下内容

+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+
| Domain | Method   | URI                     | Name              | Action                                           | Middleware |
+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+
|        | GET      | difficulty              | difficulty.index  | App\Http\Controllers\DifficultyController@index  |            |
|        | GET      | difficulty/create       | difficulty.create | App\Http\Controllers\DifficultyController@create |            |
|        | GET      | difficulty/{difficulty} | difficulty.show   | App\Http\Controllers\DifficultyController@show   |            |
|        | PUT      | difficulty/{difficulty} | difficulty.update | App\Http\Controllers\DifficultyController@update |            |
+--------+----------+-------------------------+-------------------+--------------------------------------------------+------------+

有可能吗?我正在使用 Laravel 5.1

【问题讨论】:

  • 这是可能的,但您需要扩展 Router 和 ResourceRegistrar 并覆盖一些方法。我认为这不值得努力。为什么需要删除它们?
  • 因为如果你甚至不使用它们,主管会询问 HEAD 和 PATCH 方法的目的是什么。开个玩笑。
  • 我认为没有本地方法可以做到这一点。只需手动将它们写出来或忽略它。
  • @jedrzej.kurylo 没有技术原因。只是想减少我不需要的接入点。
  • @natzim 如何手动写出来?

标签: php laravel laravel-5.1


【解决方案1】:

只做显式声明怎么样?

Route::get('/difficulty','DifficultyController@index');
Route::get('/difficulty/create','DifficultyController@create');
Route::get('/difficulty/{difficulty}','DifficultyController@show');
Route::put('/difficulty/{difficulty}','DifficultyController@update');

我什至更喜欢这样,因为它可以更清晰地了解您的应用程序的功能。

【讨论】:

  • 这样你将摆脱 PATCH,但 Route::get() 将 GET 和 HEAD 添加到你的路由中。尽管如此,GET/HEAD 应该只是单个端点的行为不同,具体取决于方法 - HEAD 应该不返回任何内容。所以它应该可以工作,如果为 OP 定义更多的路线是可以的。
猜你喜欢
  • 2019-09-10
  • 2015-11-07
  • 2018-04-27
  • 2015-11-17
  • 1970-01-01
  • 2021-03-17
  • 2016-05-16
  • 1970-01-01
  • 2017-06-12
相关资源
最近更新 更多