Редирект в Codeigniter - PullRequest
       35

Редирект в Codeigniter

3 голосов
/ 01 декабря 2011

У меня есть разбитое на страницы отображение, в котором на каждом вызове страницы я устанавливаю текущую строку URI в сеанс (в моем контроллере).

$current = $this->uri->uri_string();
$this->session->set_userdata('return_to', $current);

В представлении пользователь может щелкнуть ссылку, чтобы перейти куда-то еще (форма редактирования), которую при отправке (и правильность проверки формы) я хочу вернуться на правильную страницу разбитых на страницы результатов.

if($this->form_validation->run('edit') == TRUE )
{
    $back_to = NULL;
    $back_to = '/'.$this->session->userdata('return_to');
    ....
    redirect($back_to);
}

Кажется, иногда работает в Firefox, но умирает в Chrome, перенаправляет на favicon.ico

Любая помощь оценена

UPDATE: Моя проблема не в относительных / абсолютных адресах, по какой-то странной причине во втором контроллере перенаправление нацелено на favicon.ico, а не на то, что было сохранено в сеансе.

Ответы [ 2 ]

1 голос
/ 01 декабря 2011
if($this->form_validation->run() == TRUE )
{
    if($this->session->userdata('return_to')
    {
       redirect($this->session->userdata('return_to'));
    }
    else
    {
      redirect(base_url());
     // or trigger some error
    }
}

Не нужно присваивать переменную, redirect() использует как полный URL-адрес, так и сегментированный URL-адрес (очень похоже на site_url (), что в точности соответствует uri_string().

Так что, если это не сработает, скорее всего, ваш сеанс не установлен или не истек. Кроме того, учтите, что сеансы CI cookie , поэтому браузер может сыграть здесь свою роль.

0 голосов
/ 01 декабря 2011

Я бы использовал абсолютный URL, а не относительный.

Попробуйте это

if($this->form_validation->run('edit') == TRUE )
{
    $back_to = NULL;
    $back_to = 'http://www.mydomain.com/'.$this->session->userdata('return_to');
    ....
    redirect($back_to);
}

Как указал stealthyninja, лучше использовать siteIurl () или base_url () CodeIgniter вместо жесткого кодирования. Установите site_url () в config.php (я считаю)

...