Envío de datos junto con una redirección en CodeIgniter


Tengo una función simple C (de CRUD), y me gustaría enviar un mensaje (error o éxito) junto con mi redirección desde la función "insertar" que he escrito. ¿Hay alguna manera de adherir un campo POST con una redirección?

En 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 el viewing_page idealmente tendría algo como

if (isset($message)){
    echo $message
}

Así que en la primera vez, no veo ningún mensaje, y cuando/si hay un insert, aparece la misma página con el mensaje. ¡Gracias!

Author: Marc W, 2009-12-03

3 answers

Creo que redirect usa header(). Si es así, no creo que pueda enviar datos junto con un encabezado de ubicación. Podría lograr lo mismo usando vars de sesión o (no tan bueno) anexando una cadena de consulta a la URL de ubicación.

Para una forma 'aceptada' de hacer esto en CodeIgniter, busque un poco más de la mitad de la página de documentación de session class.

CodeIgniter admite "flashdata", o datos de sesión que solo estarán disponibles para la siguiente solicitud del servidor, y luego se borran automáticamente. Estos pueden ser muy útiles, y se usan típicamente para mensajes informativos o de estado (por ejemplo: "record 2 deleted").

Esto (ahora eliminado-aquí hay una versión archivada) post on flash messages cubre tanto la cadena de consulta como el método var de sesión.

Update: Para resumir el post ahora eliminado, mostró tanto urlencoding un mensaje y anexando como una cadena de consulta (ejemplo de post):

header('Location: http://www.example.com/index.php?message='.urlencode($message));

Y establecer una variable 'flash' usando dos frameworks (ejemplo de post):

//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 que 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
 33
Author: Tim Lytle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-27 16:15:27

Puede usar Flashdata en la clase de sesión CI . Esto es lo que se dice en el documento:

CodeIgniter admite "flashdata", o datos de sesión que solo serán disponible para la siguiente solicitud del servidor, y luego son automáticamente claro. Estos pueden ser muy útiles, y se utilizan típicamente para mensajes informativos o de estado (por ejemplo: "record 2 deleted").

Nota: Las variables de Flash vienen precedidas por "flash_", así que evita este prefijo en tu propia sesión nombre.

Para añadir 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 conservar una variable flashdata a través de una solicitud adicional, puede hacerlo utilizando la función keep_flashdata().

$this->session->keep_flashdata('item');
 26
Author: Shaolin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 17:45:21

Me gustaría señalar que CodeIgniter destruye la sesión actual al cerrar sesión. Esto hace que sea más difícil pasar a lo largo de un mensaje a lo largo de las líneas de "ha iniciado sesión/fuera", ya que no se puede utilizar flash o almacenamiento de sesión. Si necesita pasar un mensaje al hacer la transición entre los estados de inicio de sesión y de salida, le sugiero que use memcached . Otras opciones (mencionadas anteriormente) son usando cadenas de consulta URL y configurando cookies.

 0
Author: Tom Lagier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:29:43