Sending data along with a redirect in CodeIgniter

后端 未结 3 789
无人及你
无人及你 2020-12-02 18:38

I have a simple C (of CRUD) function, and I\'d like to send a message (error or success) along with my redirect from the \"insert\" function I have written up. Is there a wa

相关标签:
3条回答
  • 2020-12-02 19:27

    You can use Flashdata in the CI Session Class. This is what's said in the document:

    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").

    Note: Flash variables are prefaced with "flash_" so avoid this prefix in your own session names.

    To add flashdata:

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

    You can also pass an array to set_flashdata(), in the same manner as set_userdata().

    To read a flashdata variable:

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

    If you find that you need to preserve a flashdata variable through an additional request, you can do so using the keep_flashdata() function.

    $this->session->keep_flashdata('item');
    
    0 讨论(0)
  • 2020-12-02 19:29

    I believe redirect uses header(). If so, I don't believe you can send data along with a location header. You could accomplish the same thing using session vars or (not as good) appending a query string to the location URL.

    For an 'accepted' way to do this in CodeIgniter look a little more than halfway down the session class documentation page.

    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").

    This (now deleted - here's an archived version) post on flash messages covers both the query string and the session var method.

    Update: To summarize the now deleted post, it showed both urlencoding a message and appending as a query string (example from post):

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

    And setting a 'flash' variable using two frameworks (example from 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');
    

    Of course you can do roughly the same thing using $_SESSION directly (my example):

    //first request
    $_SESSION['flash'] = 'This is a simple flash message.';
    //next request
    $flash = $_SESSION['flash'];
    unset($_SESSION['flash']); //flash is one time only
    
    0 讨论(0)
  • 2020-12-02 19:39

    I would like to point out that CodeIgniter destroys the current session on logout. This makes it more difficult to pass along a message along the lines of "you have logged in/out" as you cannot use flash or session storage. If you need to pass a message when transitioning between logged in and out states, I suggest using memcached. Other options (mentioned above) are using URL query strings and setting cookies.

    0 讨论(0)
提交回复
热议问题