我有一个非常简单的表单:
{!! Form::open(['route' => ['complete.order']]) !!}
{!! Form::hidden('date', \Carbon\Carbon::now()->format('F j, Y ')) !!}
{!! Form::hidden('web_token', $order->web_token) !!}
{!! Form::submit('Place this order', ['class'=>'btn btn-primary']) !!}
{!! Form::close() !!}当我访问该页面时,结果如下所示:
<form method="POST" action="http://site.localhost/place-order" accept-charset="UTF-8">
<input name="_token" type="hidden" value="kc6d4XoZ78RvJNtQbN8lavpLP7e1lI7rTGBvbeIP">
<input name="date" type="hidden" value="December 21, 2018 ">
<input name="id" type="hidden" value="15">
<input class="btn btn-primary" type="submit" value="Place this order">
</form>以下是相关的路由:
Route::get('/orders/form', 'OrdersController@viewform')->name('orderform');
Route::post('/orders/review', 'OrdersController@review')->name('orders.review');
Route::post('/place-order', 'OrdersController@store')->name('complete.order');
Route::resource('/orders', 'OrdersController', ['except'=>['edit', 'update', 'destroy', 'show', 'store']])->middleware('auth');
Route::get('/orders/{order}', 'OrdersController@show')->name('orders.show');当我单击submit按钮时,我被定向到site.localhost/orders/review,根据调试栏,它被作为GET请求传递,而不是POST。
我不明白为什么会发生这样的事情。表单应该发送到site.localhost/place-order,它目前只输出return('place')用于测试。
OrdersController@show中的代码当前输出return('show')。我对所有用于测试的OrdersController方法执行了相同的操作。
添加php artisan route输出
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+
| | GET|HEAD | / | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController@js | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController@css | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | DELETE | _debugbar/cache/{key}/{tags?} | debugbar.cache.delete | Barryvdh\Debugbar\Controllers\CacheController@delete | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController@clockwork | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController@handle | Barryvdh\Debugbar\Middleware\DebugbarEnabled,Closure |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | confirm-account/{token} | | App\Http\Controllers\UserController@create | web |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | GET|HEAD | my-account | my-account.index | App\Http\Controllers\UserController@index | web,auth |
| | POST | my-account | my-account.store | App\Http\Controllers\UserController@store | web,auth |
| | GET|HEAD | my-account/create | my-account.create | App\Http\Controllers\UserController@create | web,auth |
| | PUT|PATCH | my-account/{my_account} | my-account.update | App\Http\Controllers\UserController@update | web,auth |
| | DELETE | my-account/{my_account} | my-account.destroy | App\Http\Controllers\UserController@destroy | web,auth |
| | GET|HEAD | my-account/{my_account} | my-account.show | App\Http\Controllers\UserController@show | web,auth |
| | GET|HEAD | my-account/{my_account}/edit | my-account.edit | App\Http\Controllers\UserController@edit | web,auth |
| | POST | orders | orders.store | App\Http\Controllers\OrdersController@store | web,auth |
| | GET|HEAD | orders | orders.index | App\Http\Controllers\OrdersController@index | web,auth |
| | GET|HEAD | orders/create | orders.create | App\Http\Controllers\OrdersController@create | web,auth |
| | GET|HEAD | orders/form | orderform | App\Http\Controllers\OrdersController@viewform | web |
| | POST | orders/review | orders.review | App\Http\Controllers\OrdersController@review | web |
| | GET|HEAD | orders/{order} | orders.show | App\Http\Controllers\OrdersController@show | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |
| | POST | place-order | complete.order | App\Http\Controllers\OrdersController@store | web |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
| | POST | user/store | user.store | App\Http\Controllers\UserController@store | web |
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+ 发布于 2018-12-22 03:08:43
好吧,我是个彻头彻尾的笨蛋。
问题是我使用了一个自定义的验证请求,而这个路由并没有满足这个要求。因此,它实际上返回了包含错误的页面,但由于我没有意识到这一点,所以它没有显示任何错误。
发布于 2018-12-22 03:18:36
您的问题产生是因为您正在使用Route::resource,此路由为您的控制器定义了index、create、store、show、edit、update和destroy路由,并且您试图覆盖store路由:
Route::post('/place-order', 'OrdersController@store')->name('complete.order');您可以像这样使用更改表单代码:
{!! Form::open(['route' => ['orders.store']]) !!}或者,您可以在控制器中创建一个新函数:
public function newfucntion(Request $request)
{
//All your code here
}然后创建新路由:
Route::post('/place-order', 'OrdersController@newFunction')->name('complete.order');然后更改表单,如下所示:
{!! Form::open(['route' => ['complete.order']]) !!}https://stackoverflow.com/questions/53888789
复制相似问题