web-dev-qa-db-fra.com

Envoi de données avec une redirection dans CodeIgniter

J'ai une simple fonction C (de CRUD) et j'aimerais envoyer un message (erreur ou succès) avec ma redirection à partir de la fonction "insérer" que j'ai écrite. Est-il possible de faire adhérer un champ POST à une redirection?

En pseudo-code, j'ai:

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);
}

Donc, la Viewing_page aurait idéalement quelque chose comme 

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

Donc, la première fois, je ne vois aucun message, et quand/s'il y a une insertion, la même page apparaît avec le message. Merci!

27
Alex Mcp

Je crois que redirect utilise header(). Si tel est le cas, je ne pense pas que vous puissiez envoyer des données avec un en-tête d’emplacement. Vous pouvez accomplir la même chose en utilisant des vars de session ou (pas aussi bien) en ajoutant une chaîne de requête à l'URL d'emplacement.

Pour une manière "acceptée" de faire cela dans CodeIgniter, regardez un peu plus de la moitié de la page de documentation session class .

CodeIgniter prend en charge "flashdata", ou des données de session qui ne seront disponibles que pour la prochaine requête du serveur, puis seront automatiquement effacées. Ceux-ci peuvent être très utiles et sont généralement utilisés pour les messages d’information ou d’état (par exemple: "enregistrement 2 supprimé").

This (maintenant supprimé - voici une version archivée _ publier sur des messages flash _ couvre à la fois la chaîne de requête et la méthode session var.

Update: pour résumer le message maintenant supprimé, il affiche à la fois le codage url d'un message et son ajout sous forme de chaîne de requête (exemple tiré du message): 

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

Et définir une variable 'flash' en utilisant deux frameworks (exemple tiré 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');

Bien sûr, vous pouvez faire à peu près la même chose en utilisant directement $_SESSION (mon exemple):

//first request
$_SESSION['flash'] = 'This is a simple flash message.';
//next request
$flash = $_SESSION['flash'];
unset($_SESSION['flash']); //flash is one time only
33
Tim Lytle

Vous pouvez utiliser Flashdata dans le CI Session de classe . C'est ce qui est dit dans le document:

CodeIgniter supporte "flashdata", ou des données de session qui ne seront que disponible pour la prochaine requête du serveur, et sont alors automatiquement effacé. Ceux-ci peuvent être très utiles et sont généralement utilisés pour messages d’information ou d’état (par exemple: "enregistrement 2 supprimé").

Remarque: les variables Flash sont précédées de "flash_", évitez donc ce préfixe dans vos propres noms de session.

Pour ajouter des données flash:

$this->session->set_flashdata('item', 'value');

Vous pouvez également passer un tableau à set_flashdata(), de la même manière que set_userdata().

Pour lire une variable flashdata:

$this->session->flashdata('item');

Si vous trouvez que vous devez conserver une variable flashdata dans une requête supplémentaire, vous pouvez le faire à l'aide de la fonction keep_flashdata().

$this->session->keep_flashdata('item');
27
Shaolin

Je tiens à souligner que CodeIgniter détruit la session en cours lors de la déconnexion. Cela rend plus difficile la transmission d'un message du type "vous êtes connecté/déconnecté", car vous ne pouvez pas utiliser de mémoire flash ni de stockage de session. Si vous devez transmettre un message lors de la transition entre les états connecté et déconnecté, je suggère d'utiliser memcached . Les autres options (mentionnées ci-dessus) sont en utilisant des chaînes de requête d'URL et des cookies de configuration .

0
Tom Lagier