【问题标题】:Laravel 5.4: How do I redirect back to correct page when I have 3 post pages using the same url?Laravel 5.4:当我有 3 个使用相同 url 的帖子页面时,如何重定向回正确的页面?
【发布时间】:2018-01-27 08:23:45
【问题描述】:

我想在 3 个具有 POST 表单的页面中保持相同的 url。 当表单验证失败时,我正在做\Redirect::back()->withErrors() 但如果我在第二页上,它会返回到第一页。如何返回第二页而不是第一页?

我的路线是:

Route::post("/test",['as'=>'test','uses'=>'TestController@post']);
Route::get("/test",function(){ return View::make("pages.test"); });

我的控制器是:

class TestController extends Controller
{

function post(Request $request){
    if($request->has("test1")){
        return view('/pages/test2');
    }elseif($request->has("test2")){
        return \Redirect::back()->withErrors(["my error"]);
    }else{
        return "unknown test";
    }
}

}

我的刀片文件是 test.blade.php:

{{ Form::open(['action' => ['TestController@post']]) }}
Test1
{{ Form::hidden('test1', "test1")}}
{{ Form::submit('CONTINUE')}}
{{ Form::close() }}

test2.blade.php:

{{ Form::open(['action' => ['TestController@post']]) }}
test2
{{ Form::hidden('test2', "test2") }}
{{ Form::submit('CONTINUE')}}
{{ Form::close() }}

return \Redirect::back()->withErrors(["my error"]); 执行时,我希望返回到 test2.blade.php,但我正在返回到 test.blade.php。我该如何解决这个问题?

【问题讨论】:

    标签: php laravel post laravel-5


    【解决方案1】:

    您不应该在 post 请求中使用 return view()

    这是来自商店的请求周期示例:

    GET  - show view 1 (shopping-cart)
    
    POST - it's a form submmited from view 1
         - if it fails, it redirect to view 1
         - after doing the app logic, it redirects to view 2
    
    GET  - show view 2 (payment-method)
    
    POST - it's a form submmited from view 2
         - if it fails, redirect back will go to view 2
         - if it succeded, should redirect to view 3
    
    GET  - show view 3 (order confirmation)
    

    使用这种路由结构,您的问题将消失

    【讨论】:

    • 这是我的流程,但我想将所有内容保存在同一个 url 下。但是当发生验证错误时,我会返回购物车而不是您示例中的付款方式。
    • 是的,这就是问题所在,如果您想将所有内容保留在同一个 url 下,则无法重定向回来,因为您正在尝试使用 fake back。不知道怎么解释。也许你应该再次返回视图
    • 没想过返回视图!谢谢,我做了return view('/pages/test2')->withInput($request)->withErrors(["my error"]); 并且成功了。
    • 你说You shouldn't be using return view() inside a post request.为什么不呢?我将如何显示视图?
    • 在执行业务逻辑后,post 请求应重定向到 GET 路由。至少我一直都是这样,而且从来没有遇到过问题。如果不提交表单,您将无法从 POST 路由访问视图
    猜你喜欢
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多