CodeIgniter: представление не загружается, если я использую функцию die () - PullRequest
4 голосов
/ 16 августа 2010

У меня есть следующий код.Проверяет, вошел ли пользователь в систему или нет.Когда переменная $ is_logged_in не установлена ​​или имеет значение False, я загружаю представление сообщения.К сожалению, в то же время система загружает ограниченное представление контента.Поэтому я использовал функцию die () и теперь показывает только пустую страницу.

Что я могу сделать, чтобы загрузить представление сообщений, только когда пользователь не вошел в систему?Спасибо.

if(!isset($is_logged_in) OR $is_logged_in == FALSE)
{
     $data['main_content'] = 'not_logged_in';

     $data['data'] = '';

     $this->load->view('includes/template',$data);

     die();
}

Ответы [ 4 ]

20 голосов
/ 15 ноября 2011

На самом деле, я нашел ответ для поддержания URL, а не для перенаправления:

$data['main_content'] = 'unauthorized_access';
$this->load->view('includes/template', $data);

// Force the CI engine to render the content generated until now    
$this->CI =& get_instance(); 
$this->CI->output->_display();

die();
3 голосов
/ 16 августа 2010

В любом случае. Я использовал перенаправление на страницу входа и переменную flashdata

if(!isset($is_logged_in) OR $is_logged_in == FALSE)
   {
       $this->session->set_flashdata('error_msg','You must be logged in to access restricted area');
       redirect('login/');
   }

Спасибо

1 голос
/ 21 декабря 2013

Я возился с этим некоторое время.Если вы используете die или exit после попытки загрузки представления, CI показывает пустую страницу.

Решение было бы использовать return, который останавливает выполнение текущей функции, иничего не выполняет после этого.

Простой пример:

public function validate(){
 //validation code

 if(!$valid){
  $this->load->view('error');
  return;
 }

 //This code won't run
}
0 голосов
/ 16 августа 2010

CI, вероятно, использует буферизацию вывода (см. http://www.php.net/manual/en/ref.outcontrol.php).. Если вы хотите загрузить представление и убить скрипт, вам нужно очистить буфер. Обычно это делается в самом конце скрипта, но die () останавливает его.

if(!isset($is_logged_in) OR $is_logged_in == FALSE)
{
    $data['main_content'] = 'not_logged_in';
    $data['data'] = '';
    $this->load->view('includes/template',$data);

    ob_flush();
    die();
}
...