Laravel POST 路由可以返回视图而不是重定向到另一个路由吗?

问题描述 投票:0回答:2

我见过/参与过很多项目,其中 Laravel POST 路线如下所示:

Route::post('/some-url', [SomeController::class, 'someMethod']);

控制器及其方法负责处理如下所示的路线:

class SomeController extends Controller
{
    public function someMethod(Request $request) {
        // My Logic to do something with the post data - $request
        return redirect("/some-other-url");
    }
}

按照惯例,在对 POST 数据执行某些操作后,总是会重定向到特定的 URL。

我想知道,在处理 POST 请求后,是否可以像我们处理 GET 请求那样只返回一个视图?我知道它有效,但这只是惯例还是这样做有任何问题?

例如:

class SomeController extends Controller
{
    public function someMethod(Request $request) {
        // My Logic to do something with the post data - $request
        return view("somebladeview")->with(["result" => $result ]);
    }
}
laravel post
2个回答
1
投票

该模式称为 post-redirect-get,或 PRG。这是约定,因为POST 应该用于更改数据的请求,而 GET 应该用于简单地显示数据。

如果您在 POST 后返回视图,用户可以点击重新加载,并(可能无意中)再次更改数据,例如第二次购买东西。通过使用 PRG,用户点击重新加载只需重新加载最后一个 GET,这只是重新显示一些内容。

注意: 关于您的问题的评论中有一些建议忽略此约定。我认为这是不明智和危险的,这些约定的存在是有充分理由的。


0
投票

@Don'tPanic,我已经多次尝试过这种实现,从长远来看我总是会改变它。关键是,您仍然会看到显示的帖子的 URL,而不是视图的预期 URL。刷新时再发一个表单,直接访问URL会提示不是GET请求。事实上,除了安全风险之外,这只是应用程序的一个典型缺陷,很容易被忽视。

© www.soinside.com 2019 - 2024. All rights reserved.