Metodi privati
Come abbiamo potuto vedere dalle precedenti lezioni, i segmenti degli URL vengono processati come metodi del Controller corrente. Tuttavia ci sono assolutamente dei casi in cui abbiamo la necessità di creare dei metodi specifici all'interno dello stesso Controller che però non devono assumere le caratteristiche di un segmento dell'URL.
Per ovviare a questa necessità possiamo dichiarare questi metodi come privati (protetti), tramite le apposite keywords private
e public
. Un metodo dichiarato privato non sarà gestito da Code Igniter come un segmento dell'URL. Ad esempio:
class Welcome extends CI_Controller {
// metodi pubblici, vengono presi in considerazione come segmenti dell'URL
public function index() {
$this->load->view('welcome_message');
}
public function another() {
$this->load->view('another_welcome_message');
}
// metodo privato, non viene preso in considerazione come segmento dell'URL
private function _something() {
// operazioni del metodo
}
}
In questo caso l'URL /welcome/_something
non funzionerà. L'underscore presente nel nome del metodo (_something
) serve per la compatibilità con le precedenti versioni di Code Igniter, ma possiede unicamente valore convenzionale.
Costruttori nei Controller
Ovviamente Code Igniter permette di definire un metodo costruttore in qualsiasi Controller. Per richiamare il costruttore della classe estesa è sufficiente utilizzare il seguente codice:
parent::__construct();
La chiamata è obbligatoria nel caso in cui si definisca un metodo costruttore perché altrimenti esso andrebbe a sovrascrivere (overriding
) il costruttore della classe CI_Controller
e ciò distruggerebbe la nostra applicazione. Quindi il Controller assumerà questa forma:
class Welcome extends CI_Controller {
public function __construct() {
// chiama il costruttore della classe CI_Controller
parent::__construct();
// esegui le operazioni
}
}
Dichiarare un metodo costruttore è utile nel caso in cui occorra definire dei parametri di default o gestire processi al momento dell'istanza del Controller. Ricorda, un costruttore non può restituire un valore.
Controller in sottocartelle
Nei casi in cui un'applicazione sia molto estesa, o semplicemente per scelta tecnica, Code Igniter offre la possibilità di sistemare i file contenenti i Controller in sottocartelle differenti.
Per fare ciò è sufficiente creare una sottocartella nella cartella dei Controller (application/controllers/
) e collocare in essa i file che da suddividere.
Ad esempio possiamo creare la cartella application/controllers/welcome
e includere in essa il Controller Welcome
: application/controllers/welcome/Welcome.php
.
A questo punto, il primo segmento dell'URL non indicherà più il nome del Controller, ma la sottocartella, facendo slittare i segmenti successivi che verranno poi gestiti come al solito.
Ad esempio, l'URL /welcome/welcome
chiamerà ora il Controller collocato in application/controllers/welcome/Welcome.php
.
Se non viene passato un segmento indicativo del nome del Controller da richiamare, quale Controller verrà azionato? Per ovviare a questo inconveniente occorre creare un "Controller di default" e posizionarlo nella medesima cartella. Questo Controller deve avere nome identico a ciò che è indicato nel file di configurazione application/config/routes.php
alla voce "default_controller". Seguendo questa procedura, se l'URL contiene solo il segmento che indica il nome della sottocartella verrà richiamato l'apposito Controller:
$route['default_controller'] = 'nome controller';