Codeigniter, когда использовать redirect () и когда использовать $ this-> load-> view - PullRequest
8 голосов
/ 26 ноября 2010

Я довольно новичок в Codeigniter и меня интересуют некоторые лучшие практики Codeigniter. Когда я должен использовать redirect() против использования

$this->load->view

Кажется, что когда я использую redirect(), тогда $this->session->set_flashdata работает так, как должно, но когда я использую

$this->load->view

сообщение отображается после дополнительного запроса.

Ответы [ 5 ]

7 голосов
/ 26 ноября 2010

Я думаю, что вы действительно ответили на свой вопрос.

Используйте redirect (), когда простое флэш-сообщение в верхней части другой страницы является подходящим ответом, используйте $ this-> load-> view (), когда вы предоставляете обратную связь на всю страницу для любого входящего запроса. может быть.

Так, например, когда новый пользователь регистрирует страницу «Успех», это будет загруженное представление, и, возможно, когда пользователь редактирует что-то в своей учетной записи, достаточно флэш-сообщения «Изменения сохранены» или чего-то похожего на той же странице.

6 голосов
/ 26 ноября 2010

Перенаправление также полезно для решения двух других распространенных проблем:

  • Когда ресурс в вашем приложении перемещается (и вы хотите, чтобы клиенты запоминали новый URI) *
  • После размещения сообщенияформа как один шаг в предотвращении повторных сообщений кнопки возврата
4 голосов
/ 27 июля 2012

Ваше наблюдение верно, что всякий раз, когда вы создаете flashdata, доступно только время. Это потому, что flashdata - это просто особый тип session, который будет доступен для вас при следующем запросе, а после следующего запроса он будет автоматически удален. Вам не нужно заботиться о его удалении.

Это можно проверить с помощью кода:

$this->session->set_flashdata( 'test', 'testing' );
echo $this->session->flashdata( 'test' );

Ничего не будет напечатано. Но теперь в следующий раз выполните следующий код:

echo $this->session->flashdata( 'test' );

Вы найдете необходимый вывод. Выполнение этого еще раз не даст никакого результата. Вот как они работают. Подробности смотрите в разделе Flashdata in http://codeigniter.com/user_guide/libraries/sessions.html

Для текущей страницы вам не требуется flashdata, просто передайте данные в представление. Вот код:

$data['test'] = 'testing';
$this->load->view('sample_view', $data);

Суть в том, что используйте flashdata с redirect(), и для представлений вы должны передать переменные. Надеюсь, это поможет!

1 голос
/ 01 октября 2015

Вам необходимо использовать шаблон PRG - Post / Redirect / Get. Вид перенаправления и загрузки не совпадают, если у вас есть форма в содержимом страницы.

Scenario:

Существует представление view_1 с формой для списания средств со счета.После отправки формы в view_1 вы хотите перейти к view_2 с сообщением об успехе, и у вас есть 2 варианта для достижения того же.1. загрузить view_2 с сообщением об успешном завершении или 2. перенаправить на view_2 с флэш-данными, передающими сообщение об успешном выполнении.

Вариант 1: загрузить view_2 с сообщением об успешном выполнении. Когда вы отправляете форму и обновляете ее, она вызывает повторную отправку и вызывает многократный дебет со счета, что не должно быть.Вы также можете увидеть предупреждение «Подтверждение повторной отправки формы».

Вариант 2: Это правильный ответ PRG

PRG - Post / Redirect / Get PRG - это шаблон дизайна веб-разработки, который предотвращает некоторые повторные представления форм, что означает,Форма отправки (view_1) -> Redirect -> Get (view_2)

Under the hood

Код состояния перенаправления - HTTP 1.0 с HTTP 302 или HTTP 1.1 с HTTP 303

Ответ HTTP с кодом состояния перенаправления дополнительно предоставит URL в поле заголовка местоположения.Пользовательский агент (например, веб-браузер) приглашается в ответ с этим кодом, чтобы сделать второй, в остальном идентичный, запрос на новый URL-адрес, указанный в поле местоположения.

Код состояния перенаправления должен гарантировать, что в этой ситуации браузер веб-пользователя сможет безопасно обновить ответ сервера, не вызывая повторную отправку исходного запроса HTTP POST.

Источник

Double Submit Problem

Double Submit Problem

Post/Redirect/Get Solution

Post/Redirect/Get Solution

1 голос
/ 07 декабря 2011

это довольно просто.какой URL вы хотите чтобы пользователь был?если они находятся на url1 и отправляют данные обратно на url1, а вы просто загружаете другое представление, они все равно будут на url1.если вы перенаправите на url2, они перейдут на url2.

...