Laravel。重定向旨在发布方法

问题描述 投票:4回答:3

我正在使用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']);

这是我的路线,希望这是您需要的一条。

php redirect laravel-5 url-redirection middleware
3个回答
5
投票

您可以使用命名路线来解决此问题:

让我们这样命名路由:

获取

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之类的东西来模拟发布请求之外


1
投票

您必须通过传递“ _method”输入来欺骗Laravel路由器。

我发现的最佳方法是添加欺骗并重写Authenticate中间件

您必须重写handle方法以允许使用新输入进行重定向。

redirect()->guest('your/path')->with('_method', session('url.entended.method', 'GET'));

[当您想使用除GET之外的其他方法重定向到路由时,只需执行Session::flash('url.entended.method', 'YOUR_METHOD')

告诉我是否可以解决问题


0
投票

[ Route表格Controller的非常简单的方法。

这背后的想法是,每个Route总是调用

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

应该具有下一个所需的所有参数动作方法。
© www.soinside.com 2019 - 2024. All rights reserved.