方法欺骗在Laravel POST中不起作用->;放


Method Spoofing not working in Laravel POST -> PUT

有趣的是,我的Laravel路由无法使用欺骗方法。。。我有以下内容:

<form action="{{route('admin.page.update', $page->id)}}" method="POST" accept-charset="UTF-8">
  {{ method_field('PUT') }}
  <input type="hidden" name="_token" value="{{ csrf_token() }}">
  <input type="text" name="page[name]">
  <input type="submit" value="submit">
</form>

这被呈现为:

<form action="http://ULTRA_HIDDEN_DOMAIN.dev/admin/page/9" method="POST" accept-charset="UTF-8">
  <input type="hidden" name="_method" value="PUT">
  <input type="hidden" name="_token" value="ULTRA_HIDDEN_KEY">
  <input type="text" name="page[name]">
  <input type="submit" value="submit">
</form>

但当我点击提交按钮时,我在Chrome网络上得到了以下答案:

Request URL:http://ULTRA_HIDDEN_DOMAIN.dev/admin/page/9 Request Method:POST Status Code:302 Found

当我做php artisan route:list时,我会列出它:

+--------+-----------+------------------------------------+------------------------------------+-------------------------------------------------------------------+----------------+
| Domain | Method    | URI                                | Name                               | Action                                                            | Middleware     |
+--------+-----------+------------------------------------+------------------------------------+-------------------------------------------------------------------+----------------+
|        | GET|HEAD  | admin/page                         | admin.page.index                   | App'Http'Controllers'Admin'PageController@index                   | web,auth.admin |
|        | POST      | admin/page                         | admin.page.store                   | App'Http'Controllers'Admin'PageController@store                   | web,auth.admin |
|        | GET|HEAD  | admin/page/create                  | admin.page.create                  | App'Http'Controllers'Admin'PageController@create                  | web,auth.admin |
|        | GET|HEAD  | admin/page/{page}                  | admin.page.show                    | App'Http'Controllers'Admin'PageController@show                    | web,auth.admin |
|        | PUT|PATCH | admin/page/{page}                  | admin.page.update                  | App'Http'Controllers'Admin'PageController@update                  | web,auth.admin |
|        | DELETE    | admin/page/{page}                  | admin.page.destroy                 | App'Http'Controllers'Admin'PageController@destroy                 | web,auth.admin |
|        | GET|HEAD  | admin/page/{page}/edit             | admin.page.edit                    | App'Http'Controllers'Admin'PageController@edit                    | web,auth.admin |
+--------+-----------+------------------------------------+------------------------------------+-------------------------------------------------------------------+----------------+

路由是使用Route::resource('page', 'PageController');创建的。

你有没有想过为什么这种方法欺骗不起作用?

Http中的状态代码302用于重定向,所以我想,这个请求很好,但可能它无法通过您设置的一些中间件,所以被迫重定向到其他地方。

例如,您的PUT路由需要用户登录才能更新该记录,而您没有登录,因此中间件会使用302代码将您"重定向"到登录页面。