CodeIgniter: Vista no se carga si uso la función die ()
-
28-09-2019 - |
Pregunta
Tengo el siguiente código. Comprueba si el usuario está conectado o no. Cuando la variable $ is_logged_in no está ajustado o es falso, me carga una vista de mensajes. Por desgracia, al mismo tiempo, el sistema carga la vista de contenido restringido. Por lo que utiliza la función die (), y ahora sólo muestra una página en blanco.
¿Qué puedo hacer yo solamente para cargar la vista de mensajes cuando el usuario no está conectado? Gracias.
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();
}
Solución 2
De todos modos. He utilizado una redirección a la página de inicio de sesión, y una variable flashdata ??p>
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/');
}
Gracias
Otros consejos
En realidad, he encontrado una respuesta a mantener la URL y no redirige:
$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();
He estado jugando con esto por un tiempo. Si está utilizando die
o exit
después de tratar de cargar un punto de vista, muestra una página en blanco CI.
La solución sería utilizar return
, que detiene la ejecución de la función actual, y no ejecuta nada después de que a continuación.
Un simple ejemplo:
public function validate(){
//validation code
if(!$valid){
$this->load->view('error');
return;
}
//This code won't run
}
CI probablemente está usando búfer de salida (ver http: //www.php .NET / manual / es / ref.outcontrol.php ). Si desea cargar una vista y mata a la secuencia de comandos, tendrá que vaciar el búfer. Esto normalmente se realiza al final de la secuencia de comandos, pero die () ing lo para de llegar allí.
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();
}