Лучшие практики для Post-Redirect-Get (PRG) с MVC в PHP

Есть ли какие-нибудь лучшие практики для шаблона PRG с MVC?
В этом руководстве:
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 - проблема, потому что мы не можем запустить форму со ссылки. Использование GET в Create_Item кажется лучшим вариантом.
А также мы можем сделать то же самое с 3 действиями (используя то же действие для Create_Item и Display_Item, но с дополнительным флагом для сброса формы, например:
http: //www.example .com / controller / Create_Item /? reset = 1

А также мы можем сделать то же самое всего с двумя действиями, потому что мы можем использовать if внутри 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 или данные в БД (и установить флаг сеанса для успеха) и перенаправить на указанный выше URL или следующий URL
GET http://www.example.com/controller/Create_Item/ => if $ _SESSION ['success'] показать результаты

Лично мне нравится идея иметь 4 действия, но я не не имеют реального преимущества перед другими вариантами. Но я не чувствую себя в безопасности, выбирая свой дизайн без реальных критериев.
Кто-нибудь знает ЗА и ПРОТИВ каждого дизайна (если есть)?

Например, я вижу очиститель 4 действий, но если мы хотим изменить способ сохранения временных данных, нам нужно изменить его в 4 местах.

Спасибо!

9
задан Enrique 8 May 2011 в 11:15
поделиться