用户登录并重定向后抛出MethodNotAllowedHttpException

时间:2014-10-01 13:29:34

标签: php post laravel laravel-4 laravel-routing

正在测试,这就是行为:我有一个带有表单的页面,任何人都可以使用它(无需登录),提交时,您将被重定向到下一个需要登录的页面作为用户。 这是路线:

        /*
    | Request Booking (POST)
    */
    Route::post('/booking/request-pay-booking', array(
        'as' => 'booking-request-pay-booking-post',
        'uses' => 'BookingController@postRequestPayBooking'
    ));

只要您已登录BEFORE,一切正常。如果您在单击提交时是公开的,它会重定向到登录屏幕,一旦您单击登录,我会尝试重定向到该页面,但是我收到了一个MethodNotAllowedHttpException。 我一定错过了那些东西......

你会怎么处理?是因为它是一个POST,它将我从一个页面带到另一个页面而数据丢失了吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果你进行任何重定向,你用于你想要重定向GET方法的路径,那么你应该改变一些路由,例如:

Route::post(

Route::match(['GET', 'POST']

因此,如果您重定向到您提出问题的路线,则应将其更改为:

Route::match(['GET', 'POST'], '/booking/request-pay-booking', array(
    'as' => 'booking-request-pay-booking-post',
    'uses' => 'BookingController@postRequestPayBooking'
));

答案 1 :(得分:1)

因为您之前没有登录过。您的请求未成功完成,登录屏幕显示。

您的/预订/请求 - 付款预订网址的请求将存储在会话中,如果您在登录功能中使用重定向,那么它会在您登录之前返回您请求的页面,之后您已成功登录。

但不是通过GET而是通过POST。

要克服此问题,请允许GET和POST到此路线。

由于您只是通过邮件处理请求,因此请同时使用这两种方法。因此,后期数据应该存储在其他地方,例如;会话。

在会话

中存储数据
Session::put('data', $data);

从会话中获取数据

$data = Session::get('data');

如果你这样做,那么该方法不依赖于某种方法,然后使用Marcin的解决方案;

Route::match(['GET', 'POST'], '/booking/request-pay-booking', array(
    'as' => 'booking-request-pay-booking-post',
    'uses' => 'BookingController@requestPayBooking'
));

小方法更改,因为方法处理get和post将方法的名称更改为requestPayBooking。

答案 2 :(得分:0)

感谢。结束做一些有效的事情:创建一个新的函数,我在提交表单时也重定向,在这个中我验证数据并在会话中存储输入。当VALIDATE通过时,我重定向到下一个视图,在该视图中,我从会话中提取信息,现在即使我通过登录屏幕,它也能正常工作。 :)