Supponendo che si sta utilizzando Codeigniter 2, questo può essere fatto mettendo tutti voi classi controller estesi nello stesso file.
In /applicazione/core creare un file chiamato MY_Controller.php (non dimenticare di controllare il prefisso sottoclasse in config.php intorno alla linea 109)
Qui è possibile aggiungere tutti le classi del controllore da estendere. Per esempio;
<?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/ */
Quindi quando si creano i controller come di norma, basta scegliere la classe del controller di base da estendere. Esempio;
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');
}
}
}
Almeno la funzionalità 'LoggedIn' dovrebbe essere messo a livello di servizio, non a livello di controller. – Flavius