7

¿No puede encontrar la manera de hacerlo, posiblemente porque hay otra forma de hacerlo?CodeIgniter Extender Controladores Múltiples?

Algunos de mis controladores extienden AdminLayout y algunos de ellos extienden ModLayout, pero también necesito estas páginas para extender un controlador LoggedIn.

class Profile extends AdminLayout, LoggedIn { 

Sin embargo, mirar hacia adentro no es una forma de hacerlo bien. ¿Hay alguna solución?

+0

Al menos su funcionalidad 'LoggedIn' se debe poner en la capa de servicio, no en la capa del controlador. – Flavius

Respuesta

25

Suponiendo que está usando CodeIgniter 2, esto se puede hacer poniendo todos ustedes clases de controlador extendidos en el mismo archivo.

En /aplicación/núcleo crear un archivo llamado MY_Controller.php (no se olvide de comprobar el prefijo subclase en config.php alrededor de la línea 109)

Aquí puede agregar todas usted clases de controlador para extender. Por ejemplo;

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 
/** 
* MY_Controller Class 
* 
* 
* @package Project Name 
* @subpackage Controllers 
*/ 
class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->form_validation->set_error_delimiters('<div class="form-error">', '</div>'); 
    } 
} 

class LoggedIn extends MY_Controller { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 

class AdminLayout extends LoggedIn { 

    public function __construct() { 
     parent::__construct(); 
     // do something 
    } 
} 

class ModLayout extends LoggedIn { 

    public function __construct() { 
     parent::__construct(); 
     // do something 
    } 
} 

/* End of file */ 
/* Location: ./application/core/ */ 

Luego, cuando cree sus controladores como siempre, simplemente elija la clase de controlador base para extender. Ejemplo;

class Foo extends AdminLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 

o

class Bar extends ModLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 
Cuestiones relacionadas