PRG 模式与 MVC 是否有最佳实践?
在本教程中:
http://www.theserverside.com/news/1365146/Redirect-After-Post http://www.theserverside.com/news/1365146/Redirect-After-Post
提议的解决方案需要 4 项行动:
创建项目(POST) =>“重置”表单并重定向到 Display_Item
显示项目(GET) => 显示表单(带有临时数据和错误(如果存在))
商店_商品(POST) => 尝试将数据保存到数据库,如果错误,保存错误并重定向到 Display_Item,如果成功则重定向到 Display_Stored
显示_存储(GET) => 显示创建的项目或成功消息,技术。
现在,我认为使用 POST 进行第一个操作是一个问题,因为我们无法使用链接启动表单。在 Create_Item 中使用 GET 似乎是更好的选择。
而且,我们可以对 3 个操作执行相同的操作(对 Create_Item 和 Display_Item 使用相同的操作,但使用额外的 flag 来重置表单,例如:
http://www.example.com/controller/Create_Item/?reset=1 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 http://www.example.com/controller/Create_Item/?reset=1=> 显示一个新表单并重定向到下一个 URL
GET http://www.example.com/controller/Create_Item/ http://www.example.com/controller/Create_Item/=> 显示带有临时数据和错误(如果存在)的表单
POST http://www.example.com/controller/Create_Item/ http://www.example.com/controller/Create_Item/=> 将错误保存在临时文件中,或将数据保存在数据库中(并设置成功的会话标志)并重定向到上面的 URL 或下一个 URL
GET http://www.example.com/controller/Create_Item/ http://www.example.com/controller/Create_Item/=> if $_SESSION['success'] 显示结果
就我个人而言,我喜欢有 4 个操作的想法,但与其他选项相比,我没有任何真正的优势。但如果没有真正的标准,我对选择我的设计感到不安全。
有人知道吗PROS and CONS每种设计(如果有)?
例如,我看到 4 个操作更清晰,但如果我们想更改临时数据的保存方式,则需要在 4 个位置进行更改。
Thanks!
模式是GET
一个空白表格,修改表格内容,然后POST
到服务器,然后服务器发送重定向到另一个页面,该页面是GET
,也许到一个页面说Form submitted successfully.
。 (获取->)发布->重定向->获取
第一个动作其实并不POST
。这就是填写表格并提交的最终结果。该指南更多的是关于之后该做什么POST
,就像您不进行重定向一样,那么用户将留在页面上Form submitted successfully
他们可以按 F5 并执行另一个操作POST
。然而,通过该重定向,他们可以通过安全的方式进入该结果页面GET
这不会导致双重帖子。
至于实现,您应该让每个操作在服务器端都有自己的操作。这与 MVC/RESTful 实现一致。
- GET /url?action=new -> 调用 new_form() 方法渲染新表单
- POST /url?action=create -> 调用create_form()方法保存并重定向到/url?action=show&id=1234
- GET /url?action=show&id=1234 -> 调用 show_form() 方法显示结果
- POST /url?action=save&id=1234 -> 调用 save_form() 方法保存并重定向
如果您想调用第二个操作,则可以在此处使用 3 个操作save
。大多数 REST/CRUD 约定都使用 4,但选择权在您手中。其好处与首先采用 REST/MVC 路线相同。
另请参阅这些资源:
- RESTful Web 服务 http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services
-
This http://blogs.sitepoint.com/restful-rails-part-i/涵盖 RESTful 控制器的典型约定。它涵盖了 Rails,但如果您想采用 REST 路线,也仍然适用于 PHP。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)