Отправка данных вместе с перенаправлением в CodeIgniter

У меня есть простая функция C (CRUD), и я бы хотел отправить сообщение (ошибку или успех) вместе с моей переадресацией из функции «insert», которую я написал. Есть ли способ привязать поле POST с перенаправлением?

В псевдокоде есть:

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

Таким образом, view_page идеально будет иметь что-то вроде

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

Поэтому в первый раз я не вижу никакого сообщения, и когда / если есть вставка, он выводит ту же страницу с сообщением. Благодаря!

Я считаю, что redirect использует header() . Если это так, я не думаю, что вы можете отправлять данные вместе с заголовком местоположения. Вы можете сделать то же самое, используя сеансовые вары или (не так хорошо), добавляя строку запроса к URL-адресу местоположения.

Для «приемлемого» способа сделать это в CodeIgniter смотрите чуть больше половины страницы документации класса сеанса .

CodeIgniter поддерживает «flashdata» или данные сеанса, которые будут доступны только для следующего запроса сервера, и затем автоматически очищаются. Они могут быть очень полезными и обычно используются для информационных или статусных сообщений (например: «запись 2 удалена»).

Это сообщение (теперь удалено – здесь заархивированная версия ) на флеш-сообщениях охватывает как строку запроса, так и метод var var.

Обновление . Чтобы суммировать удаленную запись, она показала как urlencoding сообщение, так и добавление в качестве строки запроса (пример из сообщения):

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

И установка переменной «flash» с использованием двух фреймворков (пример из сообщения):

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

Конечно, вы можете сделать примерно то же самое, используя $_SESSION напрямую (мой пример):

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

Вы можете использовать Flashdata в классе сеанса CI. Вот что сказано в документе:

CodeIgniter поддерживает «flashdata» или данные сеанса, которые будут доступны только для следующего запроса сервера, и затем автоматически очищаются. Они могут быть очень полезными и обычно используются для информационных или статусных сообщений (например: «запись 2 удалена»).

Примечание. Переменные Flash предваряются «flash_», поэтому избегайте этого префикса в ваших собственных именах сеансов.

Чтобы добавить flashdata:

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

Вы также можете передать массив в set_flashdata() , таким же образом, как set_userdata() .

Чтобы прочитать переменную flashdata:

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

Если вы обнаружите, что вам нужно сохранить переменную flashdata с помощью дополнительного запроса, вы можете сделать это, используя keep_flashdata() .

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

Я хотел бы отметить, что CodeIgniter разрушает текущий сеанс при выходе из системы. Это затрудняет передачу сообщения по строкам «вы вошли в систему», так как вы не можете использовать флеш-память или сеансовое хранилище. Если вам необходимо передать сообщение при переходе между состояниями входа и выхода, я предлагаю использовать memcached . Другие варианты (упомянутые выше) используют строки запроса URL и устанавливают файлы cookie .