Подтвердить что ты не робот

Отправка данных вместе с перенаправлением в 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 well";
    }
    else {
        $message = "whoops!";
    }
    redirect(view_all);
}

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

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

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

4b9b3361

Ответ 1

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

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

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

Это (теперь удалено - здесь архивная версия) post on flash сообщения охватывает как строку запроса, так и метод 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

Ответ 2

Вы можете использовать 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');

Ответ 3

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