有趣的是,我的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代码将您"重定向"到登录页面。