2011-05-08 10 views
9

¿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

4

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.
+0

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

+0

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. –

Cuestiones relacionadas