2010-11-26 21 views
7

Soy bastante nuevo en Codeigniter y me pregunto sobre algunas de las mejores prácticas de Codeigniter. Cuando debo usar redirect() frente a la utilización

$this->load->view 

Parece que cuando uso redirect() continuación $this->session->set_flashdata obras como debiera, pero cuando uso

$this->load->view 

se visualiza el mensaje después de una solicitud adicional.

+1

Por supuesto 'flashdata' no funciona en la vista actual' $ this-> load->(); ', ya que establece un valor de sesión que solo se ve en la página siguiente cargado por el navegador (no el actual). Si desea pasar datos a 'view()', simplemente páselo a la llamada 'view ($ page, $ data)' como el segundo parámetro. –

+0

No estoy seguro de lo que estás tratando de hacer. Probablemente necesites pasar un poco más de tiempo leyendo los documentos de CI. Parece que estás mezclando un poco las cosas ... – Ben

+0

http://stackoverflow.com/a/32866456/412591 –

Respuesta

6

Creo que realmente respondió su propia pregunta.

Usar el redireccionamiento() cuando un simple mensaje flash en la parte superior de otra página es una respuesta apropiada, use $ this-> load-> view() cuando esté proporcionando una página entera que valga la retroalimentación para lo que ingrese solicitud puede ser. Así, por ejemplo, cuando un nuevo usuario se registra la página "Correcto" sería una vista cargada y quizás cuando un usuario edite algo en su cuenta un mensaje flash "Cambios guardados" o algo similar en la misma página sea suficiente .

+0

aunque estoy luchando con esto, simplemente parecen redundantes aunque parece que '$ this-> load-> view()' carece de funciones como el uso de mensajes flash. seguramente podrías salir usando siempre 'redirect()'? – wired00

4

redirección también es útil para otros dos problemas comunes:

  • Cuando se presente un recurso en el que la aplicación (y desea que los clientes recuerden el nuevo URI)
  • tras registrar una forma que constituye una etapa previene back button rePOSTs
1

es bastante simple. ¿En qué url quieres que esté el usuario? si están en url1 y publican datos en url1 y solo cargas una vista diferente, seguirán en url1. si redirige a url2, irá a url2.

4

Su observación es correcta, cada vez que crea flashdata solo está disponible la hora. Esto se debe a que flashdata es solo un tipo especial de session que estará disponible para usted en la próxima solicitud y después de la próxima solicitud se eliminará automáticamente. No tiene que encargarse de su eliminación.

Esto se puede comprobar con el código: será impreso

$this->session->set_flashdata('test', 'testing'); 
echo $this->session->flashdata('test'); 

Nada. Pero ahora la próxima vez ejecute el siguiente código:

echo $this->session->flashdata('test'); 

Encontrará la salida requerida. Hacerlo una vez más no dará ningún resultado. Asi es como ellos trabajan. Para más detalles consultar la sección de Flashdata en http://codeigniter.com/user_guide/libraries/sessions.html

para la página actual no se requiere flashdata simplemente pasar los datos a la vista. Aquí está el código:

$data['test'] = 'testing'; 
$this->load->view('sample_view', $data); 

El fondo es que el uso flashdata con redirect() y de puntos de vista que debe pasar variables. ¡Espero que esto ayude!

1

Debe utilizar el patrón PRG - Publicar/Redirigir/Obtener. Redirigir y cargar vista no son lo mismo si tiene el formulario en el contenido de la página.

Scenario: 

Hay una vista, una vista_1 con forma para debitar dinero de una cuenta. Después de enviar el formulario en la vista_1, quiere saltar a view_2 con un mensaje de éxito y tiene 2 opciones para lograrlo. 1. cargar view_2 con mensaje de éxito o 2. redirigir a view_2 con flash data carrying success.

Opción 1: view_2 carga con el mensaje de éxito Al enviar el formulario y actualizar, que hará que la nueva presentación y causar múltiples débito de la cuenta, que no debería ser el caso. Usted también puede ver la alerta emergente "Confirmación de reenvío de formulario".

Opción 2: Esta es la respuesta correcta PRG

PRG - Mensaje/Redirigir/Obtener PRG es un patrón de diseño desarrollo web que impide que algunos envíos de formularios duplicados que significa, Envíe el formulario (View_1) - > redirección -> Get (view_2) código de estado

Under the hood 

redirección - HTTP 1.0 con HTTP 302 o HTTP 1.1 con HTTP 303

Una respuesta HTTP con código de estado de redireccionamiento también proporcionará una URL en el campo del encabezado de ubicación. El agente de usuario (por ejemplo, un navegador web) es invitado por una respuesta con este código para realizar una segunda solicitud, por lo demás idéntica, a la nueva URL especificada en el campo de ubicación.

El código de estado de redireccionamiento es para garantizar que, en esta situación, el navegador del usuario de la web pueda actualizar de forma segura la respuesta del servidor sin provocar que se reenvíe la solicitud HTTP POST inicial.

Source

Double Submit Problem 

Double Submit Problem

Post/Redirect/Get Solution 

Post/Redirect/Get Solution

Cuestiones relacionadas