¿Existe alguna mejor práctica para el patrón PRG con MVC?
En este tutorial:
http://www.theserverside.com/news/1365146/Redirect-After-Post
la solución propuesta requiere 4 acciones:
Create_Item (POST) => "restablece" la forma y redirige a Display_Item
Display_Item (GET) => muestra la forma (con datos temporales y los errores si existe)
Store_Item (POST) => tratar de guardar los datos en base de datos, si los errores, excepto los errores y redirigir a Display_Item, si el éxito redirigir a Display_Stored
Display_Stor ed (GET) => muestra el elemento creado o un mensaje de éxito, tec.
Ahora, creo que tener la primera acción con POST es un problema, porque no podemos iniciar el formulario con un enlace. Usar GET en Create_Item parece ser una mejor opción.
Y también, podemos hacer lo mismo con 3 acciones (usando la misma acción para Create_Item y Display_Item, pero con un indicador adicional para resetear la forma, por ejemplo:
http://www.example.com/controller/Create_Item/?reset=1
y también podemos hacer lo mismo con sólo 2 acciones, ya que podemos usar un if dentro Create_Item para comprobar si la petición es GET o POST (por lo que se están combinando Display_Item con Store_Item).
Y también podemos hacer lo mismo con sólo 1 acción, porque podemos tener una bandera adicional (en la consulta URL o en una sessio n) para mostrar los resultados en lugar de la forma:
GET http://www.example.com/controller/Create_Item/?reset=1 => muestra una nueva forma y vuelve a dirigir a la siguiente dirección URL
GET http://www.example.com/controller/Create_Item/ => muestra un formulario con los datos temporales y errores si existe
POSTAL http://www.example.com/controller/Create_Item/ => guardar errores en la temperatura, o los datos en el PP (y establecer un indicador de sesión para el éxito) y redirige a la URL anterior o siguiente URL
GET http://www.example.com/controller/Create_Item/ => Si $ _SESSION [ 'éxito'] resultados muestran
Personalmente me gusta la idea de tener 4 acciones, pero no tengo ninguna ventaja real sobre las otras opciones. Pero no me siento seguro eligiendo mi diseño sin un criterio real.
¿Alguien conoce el PROS y CONS de cada diseño (si corresponde)?
Por ejemplo, veo las 4 acciones más limpias, pero si queremos cambiar cómo se guardan los datos temporales, tenemos que cambiarlos en 4 lugares.
Gracias!Mejores prácticas para Post-Redirect-Get (PRG) con MVC en PHP
Respuesta
El patrón es GET
un formulario en blanco, modificar el contenido de la forma, y luego de que POST
al servidor, que a su vez envía una redirección a otra página que es una GET
, tal vez a una página diciendo Form submitted successfully.
. (Obtener ->) Publicar-> Redirigir-> Obtener
La primera acción no es realmente POST
. Ese es el resultado final de completar un formulario y enviarlo.La guía es más acerca de qué hacer después de eso POST
, como si no hiciera una redirección, entonces el usuario se queda en una página que dice Form submitted successfully
donde podría simplemente presionar F5 y hacer otra POST
. Sin embargo, con esa redirección, están en esa página de resultados a través de un GET
seguro que no dará lugar a una doble publicación.
En cuanto a la implementación, debe tener cada uno su propia acción en el lado del servidor. Esto está en línea con la implementación de MVC/RESTful.
- GET/url acción = new -> método new_form llamada() para rendir una nueva forma
- de POST/url action = create -?> Método create_form() para guardar y redirigir a/url? action = mostrar & id = 1234
- GET/url action = mostrar & id = 1234 -> Show_Form método call() para mostrar el resultado
- de POST/url acción = guardar & id = 1234 -> save_form Call() método para guardar y redirigir
En este caso, podría usar 3 acciones si deseara tener la 2da acción llamada save
. La mayoría de las convenciones REST/CRUD usan el 4, pero la elección es suya. Los beneficios son los mismos que ir en la ruta REST/MVC en primer lugar.
ver a estos recursos, así:
- RESTful web services
- This cubre las convenciones típicas de controladores REST. Cubre los rieles, pero también se aplica a PHP si quieres ir a la ruta REST.
- 1. PHP MVC Mejores prácticas/"Reglas" para el éxito
- 2. Mejores prácticas con ASP.NET MVC ven modelos
- 3. ¿Mejores prácticas de PHP?
- 4. ASP.Net MVC Cookies Mejores prácticas
- 5. ASP.Net MVC: Mejores prácticas para archivos DBML
- 6. Mejores prácticas Sencha Touch MVC
- 7. Mejores prácticas para la organización de proyectos con ASP.NET MVC
- 8. Aplicación multilingüe en ASP.NET MVC: ¿mejores prácticas?
- 9. php y mysql, mejores prácticas
- 10. Mejores prácticas para implementar una aplicación MVC en IIS7
- 11. Mejores prácticas para HttpContext y controladores comprobables en ASP.Net MVC
- 12. ASP.net MVC - Vistas y mejores prácticas jQuery
- 13. mejores prácticas en PHP y MySQL con cadenas internacionales
- 14. Mejores prácticas para C#
- 15. ¿Mejores prácticas para administrar versiones con scons?
- 16. MVC 3 con las mejores prácticas de Razor
- 17. Mejores prácticas para pasar datos de asp.net-mvc a javascript
- 18. Mejores prácticas para usar git con CVS
- 19. PHP Flush: frecuencia y mejores prácticas
- 20. Mejores prácticas para la depuración Envolvente MVC de ASP.NET
- 21. Mejores prácticas para Magento Deployment
- 22. PHP incluye las mejores prácticas pregunta
- 23. ¿Mejores prácticas de Flex?
- 24. ¿Mejores prácticas con JFrame Constructors?
- 25. Mejores prácticas para almacenar configuraciones
- 26. Mejores prácticas para la depuración
- 27. PHP: ¿las mejores prácticas de seguridad para la información mostrada?
- 28. PHP: las mejores prácticas para la Insuficiencia silencioso
- 29. ¿Mejores prácticas para API seguras?
- 30. Implementar ASP.NET MVC en Linux: Mejores prácticas, herramientas y sorpresas
sí, entiendo PRG, pero estoy preguntando sobre la implementación (con MVC en PHP). Podemos usar 4 acciones, 3, 2, 1, y no puedo ver claramente si hay una ventaja de una de ellas sobre las demás. – Enrique
Actualizado para aclarar con suerte. El uso de 4 es más convencional y establece claramente lo que está haciendo, de modo que no hay confusión en la implementación del código entre la representación de un formulario existente frente a la representación de un formulario nuevo, salvo el guardado de un formulario y la creación de un formulario. Lo mejor es dividirlo todo. –