我正在使用laravel 5,这是我的问题。用户填写表格X,如果他未登录,则他将被重定向以填写更多字段表格,或者可以登录。如果用户填写其他字段,一切正常,但是如果他登录,则laravel重定向用户使用GET方法而不是POST来形成X。
这是我的中间件重定向的样子:
return redirect()->guest('user/additional-fields');
此重定向将在成功登录后出现:
return redirect()->intended();
所以在重定向时出现错误MethodNotAllowedHttpException。 URL是正确的,定义为POST方法。我在这里想念什么? laravel为什么将重定向重定向为GET方法?我该如何解决这个问题?谢谢!
编辑:
Route::post('/user/log-in-post', ['as' => 'user-log-in-post', 'uses' => 'UserController@postUserLogIn']);
这是我的路线,希望这是您需要的一条。
您可以使用命名路线来解决此问题:
让我们这样命名路由:
获取
Route::get('user/additional-fields',array(
'uses' => 'UserController@getAdditionalFields',
'as' => 'user.getAdditionalFields'
));
发帖
Route::post('user/additional-fields',array(
'uses' => 'UserController@postAdditionalFields',
'as' => 'user.postAdditionalFields'
));
因此,我们现在可以通过执行此操作以确保Laravel使用正确的路线
return redirect()->guest(route('user.getAdditionalFields'));
还请注意,由于Laravel希望提交表单,因此无法重定向POST
。所以你不能这样做:
return redirect()->guest(route('user.postAdditionalFields'));
除了您使用诸如cURL或GuzzleHttp之类的东西来模拟发布请求之外
您必须通过传递“ _method”输入来欺骗Laravel路由器。
我发现的最佳方法是添加欺骗并重写Authenticate中间件
您必须重写handle方法以允许使用新输入进行重定向。
redirect()->guest('your/path')->with('_method', session('url.entended.method', 'GET'));
[当您想使用除GET之外的其他方法重定向到路由时,只需执行Session::flash('url.entended.method', 'YOUR_METHOD')
。
告诉我是否可以解决问题
[
Controller
的Action方法。因此在这种情况下,您可以直接调用该方法来代替执行的重定向操作。检查XYZController
的代码示例 $registration = Registration::find($req->regId);
$registration->update([ 'STEP_COMPLETED' => 5]); // Step 5 completed.
# Call Post Method Route
return $this->admissionFinish($req);
应该具有下一个所需的所有参数动作方法。注意,$ req