MVC的PRG模式有哪些最佳实践?
在本教程中:
http://www.theserverside.com/news/1365146/Redirect-After-Post
建议的解决方案需要4个动作:
Create_Item (POST)=> “重置”表单并重定向到Display_Item
Display_Item (GET)=>显示表格(有临时数据和错误,如果存在)
Store_Item (POST)=>尝试将数据保存到数据库,如果错误,保存错误并重定向到Display_Item,如果成功重定向到Display_Stored
Display_Stored (GET)=>显示创建的项目或成功消息,tec。
现在,我认为使用POST进行第一个操作是一个问题,因为我们无法使用链接启动表单。在 Create_Item 中使用GET似乎是一个更好的选择。
而且,我们可以对3个动作执行相同的操作(对Create_Item和Display_Item使用相同的操作,但使用额外的标志来重置表单,例如:
http://www.example.com/controller/Create_Item/?reset=1
而且我们也可以只用2个动作做同样的事情,因为我们可以使用if in Create_Item 来检查请求是GET还是POST(所以我们将Display_Item与Store_Item结合起来)。
而且我们也可以只用1个动作做同样的事情,因为我们可以有一个额外的标志(在URL查询或会话中)来显示结果而不是表格:
GET http://www.example.com/controller/Create_Item/?reset=1 =>显示一个新表单并重定向到下一个URL
GET http://www.example.com/controller/Create_Item/ =>显示包含临时数据和错误的表单(如果存在)
POST http://www.example.com/controller/Create_Item/ =>保存temp中的错误或DB中的数据(并设置成功的会话标志)并重定向到上面的URL或下一个URL
GET http://www.example.com/controller/Create_Item/ =>如果$ _SESSION ['success']显示结果
就个人而言,我喜欢有4个动作的想法,但我没有任何其他选择的真正优势。但是如果没有真正的标准,我选择我的设计并不安全
有人知道每个设计的 PROS 和 CONS (如果有的话)?
例如,我看到4个动作更清洁,但如果我们想要更改临时数据的保存方式,我们需要在4个位置更改它。
谢谢!
答案 0 :(得分:4)
模式是GET
一个空白表单,修改表单的内容,然后POST
到服务器,然后将重定向发送到另一个页面GET
,也许到一个页面说Form submitted successfully.
。 (的Get-&GT)后> Redirect->获得
第一个动作不是POST
。这是填写表格并提交表格的最终结果。该指南更多地是关于在POST
之后要做什么,好像你没有进行重定向,然后用户留在一个页面上Form submitted successfully
,他们可以点击F5然后再做另一个{{} 1}}。然而,通过该重定向,他们通过安全POST
在结果页面上,这不会导致双重帖子。
至于实现,你应该在服务器端各自拥有自己的动作。这与MVC / RESTful实现一致。
如果您想要进行第二次操作调用GET
,可以在此处使用3个操作。大多数REST / CRUD约定使用4,但选择权在您手中。其优点与首先使用REST / MVC路由相同。
请参阅以下资源: