php - session_destroy - Enviar datos junto con una redirección en CodeIgniter
session name codeigniter (3)
Tengo una función simple C (de CRUD), y me gustaría enviar un mensaje (error o éxito) junto con mi redirección de la función "insertar" que he escrito. ¿Hay alguna forma de adherir un campo POST con una redirección?
En el pseudo código tengo:
function view_all{
//set up some initial variables
$this->load->view(viewing_page, $data)
}
function insert{
if ($this->db->insert(my_table, $_POST)){
$message = "All''s well";
}
else {
$message = "whoops!";
}
redirect(view_all);
}
Así que la página de visualización idealmente tendría algo así como
if (isset($message)){
echo $message
}
Así que, la primera vez, no veo ningún mensaje, y cuando / si hay un inserto, aparece la misma página con el mensaje. ¡Gracias!
Creo que redirect
usa header()
. Si es así, no creo que pueda enviar datos junto con un encabezado de ubicación. Usted podría lograr lo mismo usando los valores de sesión o (no tan buenos) añadiendo una cadena de consulta a la URL de ubicación.
Para una forma ''aceptada'' de hacer esto en CodeIgniter, busque un poco más que la mitad de la página de documentación de la clase de sesión .
CodeIgniter admite "flashdata", o datos de sesión que solo estarán disponibles para la próxima solicitud del servidor, y luego se borran automáticamente. Estos pueden ser muy útiles y, por lo general, se utilizan para mensajes informativos o de estado (por ejemplo, "registro 2 eliminado").
Esta publicación (ahora eliminada - aquí está una versión archivada ) en mensajes flash abarca tanto la cadena de consulta como el método de sesión var.
Actualización : para resumir la publicación ahora borrada, mostró urlencoding un mensaje y se agrega como una cadena de consulta (ejemplo de la publicación):
header(''Location: http://www.example.com/index.php?message=''.urlencode($message));
Y establecer una variable ''flash'' usando dos marcos (ejemplo de la publicación):
//Zend Framework
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->setNamespace(''actionErrors'');
$flashMessenger->addMessage($message);
//CakePHP
$this->Session->setFlash(''Your post has been saved.'');
$this->redirect(''/news/index'');
Por supuesto, puedes hacer más o menos lo mismo usando $_SESSION
directamente (mi ejemplo):
//first request
$_SESSION[''flash''] = ''This is a simple flash message.'';
//next request
$flash = $_SESSION[''flash''];
unset($_SESSION[''flash'']); //flash is one time only
Me gustaría señalar que CodeIgniter destruye la sesión actual al cerrar la sesión. Esto hace que sea más difícil transmitir un mensaje como "has iniciado sesión / cerrado" ya que no puedes usar el almacenamiento flash o de sesión. Si necesita pasar un mensaje al hacer la transición entre los estados de ingreso y salida, sugiero usar memcached . Otras opciones (mencionadas anteriormente) utilizan cadenas de consulta URL y configuración de cookies .
Puede usar Flashdata en la clase de sesión de CI. Esto es lo que se dice en el documento:
CodeIgniter admite "flashdata", o datos de sesión que solo estarán disponibles para la próxima solicitud del servidor, y luego se borran automáticamente. Estos pueden ser muy útiles y, por lo general, se utilizan para mensajes informativos o de estado (por ejemplo, "registro 2 eliminado").
Nota: Las variables de flash vienen precedidas de "flash_", así que evite este prefijo en sus propios nombres de sesión.
Para agregar flashdata:
$this->session->set_flashdata(''item'', ''value'');
También puede pasar una matriz a set_flashdata()
, de la misma manera que set_userdata()
.
Para leer una variable flashdata:
$this->session->flashdata(''item'');
Si encuentra que necesita preservar una variable de flashdata a través de una solicitud adicional, puede hacerlo utilizando la función keep_flashdata()
.
$this->session->keep_flashdata(''item'');