Come anticipato, il Controller è il componente principale di Code Ingiter. Descrizioni tecniche a parte un Controller è semplicemente una classe associata al segmento di un URL della nostra applicazione. L'URL http://localhost/codeigniter_app/welcome
andrà a richiamare il Controller denominato Welcome
situato in application/controllers/Welcome.php
. Come puoi notare la prima lettera del file che contiene il Controller è maiuscola, questo è obbligatorio.
Struttura di un Controller
Andiamo ora ad analizzare la struttura di Welcome.php
.
class Welcome extends CI_Controller {
/**
* Index Page for this controller.
*
*/
public function index()
{
$this->load->view('welcome_message');
}
}
Quando nell'URL non compare il secondo segmento, che rappresenta il metodo da richiamare nel Controller, il metodo che verrà chiamato (appropriatamente) index
. L'URL http://localhost/codeigniter_app/welcome
andrà dunque a chiamare Welcome->index
.
Per definire un Controller, questo deve avere la prima lettera maiuscola ed estendere le funzionalità della classe CI_Controller
dove CI sta per Code Igniter:
class ControllerName extends CI_Controller {
// ..
}
All'interno della classe possiamo definire i metodi, che saranno chiamati a seconda del secondo segmento dell'URL:
class Welcome extends CI_Controller {
/**
* viene chiamato dall'URL /welcome
*
*/
public function index(){
$this->load->view('welcome_message');
}
/**
* viene chiamato dall'URL /welcome/something
*
*/
public function something(){
$this->load->view('something');
}
/**
* viene chiamato dall'URL /welcome/another/60
*
*/
public function another($num){
$data['num'] = $num;
$this->load->view('another-view', $data);
}
}
Definire un Controller di default
Quando lanciamo un'applicazione Web denominata codeigniter_app
, senza passare nulla all'URL, il motore di Code Ingiter richima il Controller denominato Welcome
. Perché? Non si tratta di un comportamento di default, bensì di una precisa impostazione di configurazione.
Per impostare un Controller di default, ovvero un Controller che viene richiamato quando non sono presenti segmenti nel nostro URL, devi aprire il file di configurazione application/config/routes.php
e settare il parametro denominato default_comntroller
con il nome del Controller da utilizzare a questo scopo. Se apri il suddetto file troverai infatti la voce:
$route['default_controller'] = 'welcome'
Cambiando questo valore cambierà anche il Controller che verrà richiamato dall'URL root dell'applicazione.
Rimappatura
Con il termine rimappatura s'intende la sovrascrittura del comportamento di default da parte di Code Igniter nella lettura degli URL. Se il Controller definisce infatti un metodo denominato _remap
, questo verrà richiamato indipendentemente dalla struttura dell'URL. Sarà ora compito della logica del metodo fare gli appositi calcoli e richiamare le View, a seconda dei parametri che gli vengono forniti (i metodi che iniziano con un underscore "_" hanno una funzionalità speciale).
public function _remap($method) {
// ..
}
Il metodo sovrascritto, che come abbiamo visto è rappresentato dal secondo segmento dell'URL, verrà passato a _remap
come parametro:
public function _remap($method) {
if ($method === 'something') {
$this->$something();
}
else {
$this->$other();
}
}
Qualsiasi parametro aggiuntivo verrà passato a _remap
come parametro opzionale in formato array. Questo array può essere utilizzato dalla funzione PHP nativa call_user_func_array()
per gestire l'URL:
public function _remap($method, $params = array()) {
$method = 'my_'.$method;
if (method_exists($this, $method)) {
return call_user_func_array(array($this, $method), $params);
}
show_404();
}
Nel codice precedente, qualsiasi sia l'URL digitato, viene chiamato _remap
. Se il secondo segmento è un metodo definito nel Controller, allora verrà chiamato con i parametri opzionali forniti dall'URL in formato array. Altrimenti verrà generato un errore 404 anch'esso personalizzabile.