Enr*_*que 9 php model-view-controller post-redirect-get
MVC的PRG模式有哪些最佳实践?
在本教程:
http://www.theserverside.com/news/1365146/Redirect-After-Post
所提出的解决方案要求4个动作:
Create_Item(POST)=> "复位"的形式,并且重定向到Display_Item
Display_Item(GET)= >显示表单(具有临时数据和错误,如果存在)
Store_Item(POST)=>尝试将数据保存到DB,如果错误,保存错误并重定向到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个动作做同样的事情,因为我们可以在Create_Item里面使用if 来检查请求是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/ => if $ _SESSION ['success']显示结果
我个人喜欢有4个动作的想法,但我没有任何其他选项的真正优势.但是如果没有真正的标准,我选择我的设计并不安全.
有人知道每个设计的PROS和CONS(如果有的话)吗?
例如,我看到4个动作更清晰,但如果我们想要更改临时数据的保存方式,我们需要在4个位置更改它.
谢谢!
该模式是GET一个空白表单,修改表单的内容,然后POST将其发送到服务器,然后服务器将重定向发送到另一个页面,该页面是GET,可能是一个页面说Form submitted successfully.。(获取->)发布->重定向->获取
第一个动作其实并不是POST。这就是填写表格并提交的最终结果。该指南更多地介绍了之后要做什么POST,就好像您不进行重定向一样,然后用户会留在一个页面上,说明Form submitted successfully他们可以按 F5 并执行另一个操作POST。然而,通过该重定向,他们可以通过安全的方式进入该结果页面GET,这不会导致重复发布。
至于实现,您应该让每个操作在服务器端都有自己的操作。这与 MVC/RESTful 实现一致。
如果您想调用第二个操作,则可以在此处使用 3 个操作save。大多数 REST/CRUD 约定都使用 4,但选择权在您手中。其好处与首先采用 REST/MVC 路线相同。
另请参阅这些资源:
| 归档时间: |
|
| 查看次数: |
3270 次 |
| 最近记录: |