CodeIgniter'daki bir yönlendirme ile birlikte veri gönderme

3 Cevap php

Ben (rezil) basit bir C fonksiyonu var ve ben yukarı yazdım "insert" fonksiyonu benim yönlendirme ile birlikte bir mesaj (hata veya başarı) göndermek istiyorum. Bir yönlendirme ile bir POST alan yapıştırmak için bir yolu var mı?

Sözde kodda var:

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

Yani viewing_page ideal gibi bir şey olurdu

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

Yani sonra ilk kez, ben herhangi bir mesaj görmüyorum, ve bir ekleme varsa, bu mesaj ile aynı sayfa açılır / ne zaman. Teşekkürler!

3 Cevap

I-redirect kullanım header() inanıyoruz. Eğer öyleyse, ben size bir konum başlığıyla birlikte veri gönderebilir inanmıyorum. Siz oturum değişkenler kullanılarak ya da (iyi değil) konum URL'ye bir sorgu dize ekleyerek aynı şeyi başarmak olabilir.

CodeIgniter'daki Bunu yapmak için bir 'kabul edilen' yol yarıya session class dokümantasyon sayfasına aşağı biraz daha fazla görünüyor.

CodeIgniter, sadece bir sonraki sunucu istek için geçerli olacak "flashdata" veya oturum verileri destekler, ve daha sonra otomatik olarak silinir. Bunlar çok yararlı olabilir ve genellikle bilgi veya durum iletileri için kullanılır (örneğin: "silinen kaydın 2").

Bu (şimdi silindi - Burada bir archived version var) post on flash messages sorgu dizesi ve oturum var metodunu kapsar.

Update: şimdi silinmiş mesajı özetlemek için, bir mesaj urlkodçözümü ve bir sorgu dizesi (görevinden örnek) olarak eklenmesi hem de gösterdi:

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

Ve iki çerçeveler (görevinden örnek) kullanarak bir 'flash' değişkeni ayarı:

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

Tabii ki $_SESSION, doğrudan (benim örnek) kullanarak kabaca aynı şeyi yapabilirsiniz:

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

Siz CI Flashdata kullanabilirsiniz Session Class. Bu belgede adı geçen şeydir:

CodeIgniter supports "flashdata", or session data that will only be available for the next server request, and are then automatically cleared. These can be very useful, and are typically used for informational or status messages (for example: "record 2 deleted").

Not: Flash değişkenler yani kendi oturum adlarında bu önek önlemek "flash_" başında.

Flashdata eklemek için:

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

Ayrıca, aynı şekilde, set_flashdata() için bir dizi geçebilir set_userdata().

Bir flashdata değişken okumak için:

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

Eğer ek bir istek ile bir flashdata değişken korumak gerektiğini bulursanız, keep_flashdata() fonksiyonunu kullanarak yapabilirsiniz.

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

Ben CodeIgniter logout üzerinde geçerli oturumu yok olduğunu işaret etmek istiyorum. Bu daha zor Eğer flaş veya oturum depolama kullanamazsınız gibi "sen / out giriş var" çizgisinde bir mesaj iletmekten yapar. Eğer devletler ve dışarı giriş arasında geçiş yaparken bir mesaj geçmek gerekirse, ben memcached kullanmanızı öneririz. (Yukarıda belirtilen) Diğer seçenekler using URL query strings ve setting cookies.