У меня есть простая функция 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 .