Laravel 表单提交发送到错误的路由?

Laravel form submission sending to the wrong route?

我有一个非常简单的表格:

{!! 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');

当我点击提交按钮时,我被定向到 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                                                  |
+--------+-----------+-------------------------------+-----------------------+------------------------------------------------------------------------+------------------------------------------------------+ 

好吧,我是个彻头彻尾的白痴。

问题是我使用自定义请求进行验证,这条路线不符合要求。所以它实际上返回了错误的页面,但由于我没有意识到这一点,所以它没有显示任何错误。

你的问题是因为你使用的是Route::resource,这个路由定义,indexcreatestoreshoweditupdatedestroy 路由为您的控制器,您正试图覆盖 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']]) !!}