2016-07-22 75 views
0

说来好笑,我的Laravel路由不与方法欺骗的工作...我有以下几点:方法欺骗在Laravel POST不工作 - > PUT

<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我得到它列出:使用Route::resource('page', 'PageController');创建

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

的路线。

任何想法为什么方法欺骗不起作用?

回答

1

Http中的状态码302是用于重定向的,所以我猜这个请求很好,但也许它不能传递你设置的一些中间件,所以不得不重定向到其他地方。

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

+0

不幸的是,我检查了中间件,它的工作正常,我看着xdebug的问题也许是新的东西出现:)谢谢 – JohnnyAce

+2

只是为了文档错误,问题是控制器上有另一个请求对象,例如'公共函数更新(Request $ request,$ id)''有'公共函数更新(MyOwnRequest $ request,$ id)''。这个新的请求是重定向的问题。 – JohnnyAce