wake-up-neo.com

Senden von Daten zusammen mit einer Umleitung in CodeIgniter

Ich habe eine einfache C (von CRUD) -Funktion, und ich möchte eine Nachricht (Fehler oder Erfolg) zusammen mit meiner Weiterleitung von der "Einfügen" -Funktion senden, die ich geschrieben habe. Gibt es eine Möglichkeit, ein POST - Feld mit einer Weiterleitung zu verknüpfen?

Im Pseudocode habe ich:

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

Also die viewing_page hätte im Idealfall so etwas 

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

Beim ersten Mal sehe ich keine Nachricht und wenn/wenn es ein Insert gibt, erscheint dieselbe Seite mit der Nachricht. Vielen Dank!

27
Alex Mcp

Ich glaube, dass redirectheader() verwendet. Wenn ja, glaube ich nicht, dass Sie Daten zusammen mit einem Standortheader senden können. Sie können dasselbe tun, indem Sie Session-Vars verwenden oder (nicht so gut) eine Abfragezeichenfolge an die Standort-URL anhängen.

Nach einer akzeptierten Methode in CodeIgniter sollten Sie auf der Sitzungsklasse -Dokumentationsseite etwas mehr als auf halbem Weg nach unten schauen.

CodeIgniter unterstützt "flashdata" oder Sitzungsdaten, die nur für die nächste Serveranfrage verfügbar sind und dann automatisch gelöscht werden. Diese können sehr nützlich sein und werden normalerweise für Informationsnachrichten oder Statusmeldungen verwendet (z. B. "Datensatz 2 gelöscht").

Dies (jetzt gelöscht - hier ist ein archivierte Version ) Beitrag zu Flash-Nachrichten umfasst sowohl die Abfragezeichenfolge als auch die Session-Var-Methode.

Update: Um den nun gelöschten Beitrag zusammenzufassen, wurde sowohl eine Nachricht als auch eine Nachricht als Abfragezeichenfolge angezeigt (Beispiel aus dem Beitrag): 

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

Und eine 'Flash'-Variable mit zwei Frameworks setzen (Beispiel aus dem Posting):

//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');

Natürlich können Sie mit $_SESSION direkt dasselbe machen (mein Beispiel):

//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

Sie können Flashdata in der CI Session Class verwenden. Dies ist, was im Dokument gesagt wird:

CodeIgniter unterstützt "flashdata" oder Sitzungsdaten, die nur .__ sind. für die nächste Serveranfrage verfügbar und werden dann automatisch gelöscht. Diese können sehr nützlich sein und werden normalerweise für .__ verwendet. Informations- oder Statusmeldungen (zum Beispiel: "Datensatz 2 gelöscht").

Hinweis: Flash-Variablen werden "flash_" vorangestellt. Vermeiden Sie dieses Präfix in Ihren eigenen Sitzungsnamen.

So fügen Sie Flashdaten hinzu:

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

Sie können ein Array auch an set_flashdata() übergeben, genauso wie set_userdata().

So lesen Sie eine Flashdata-Variable:

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

Wenn Sie feststellen, dass Sie eine flashdata-Variable durch eine zusätzliche Anforderung beibehalten müssen, können Sie dies mit der Funktion keep_flashdata() tun.

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

Ich möchte darauf hinweisen, dass CodeIgniter beim Abmelden die aktuelle Sitzung zerstört. Dies macht es schwieriger, eine Nachricht im Sinne von "Sie haben sich angemeldet/abgemeldet" weiterzuleiten, da Sie keine Flash- oder Sitzungsspeicher verwenden können. Wenn Sie beim Übergang zwischen angemeldetem und abgemeldetem Status eine Nachricht übergeben müssen, empfehle ich die Verwendung von memcached . Andere Optionen (oben erwähnt) sind mit URL-Abfragezeichenfolgen und Cookies setzen .

0
Tom Lagier