Sviluppare in PHP con CodeIgniter – parte 1

CodeIgniter è un framework PHP destinato allo sviluppo di web application che presenta sorprendenti caratteristiche di leggerezza e flessibilità. La filosofia che il team di sviluppo ha adottato è chiara: pragmatismo, performance, semplicità. Alcune delle affermazioni (tratte dalla homepage del sito) che ci hanno colpito in particolar modo affermano che CodeIgniter è adatto:

  • a chi vuole un framework che occupi poche risorse;
  • a chi necessita di una vasta compatibilità con hosting di tipo standard, che sono molto variabili a livello di configurazione e supporto a PHP;
  • a chi non vuole un framework che costringa a regole di scrittura del codice troppo stringenti;
  • a chi non è interessato a librerie monolitiche come PEAR;
  • a chi cerca di evitare la complessita in favore di soluzioni semplici.

Vediamo in questo breve tutorial come realizzare un semplice progetto con questo framework.

Prerequisiti, installazione e configurazione

I requisiti per poter utilizzare CodeIgniter sono decisamente modesti, è sufficiente infatti PHP 5.1.6 o superiore, mentre i database supportati sono molti: MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite, and ODBC; ovviamente possiamo fare a meno del database se la nostra applicazione non ne ha bisogno.

Per prima cosa dobbiamo scaricare il framework dal sito; sono disponibili anche diversi “Language Packs”, fra cui l’italiano, con le traduzioni dei messaggi di sistema.

Una volta scaricato il pacchetto dobbiamo estrarlo e copiarne i contenuti nella directory root della nostra applicazione. La struttura delle directory è molto simile a quella di altri framework MVC, siano essi PHP (CakePhp, Symfony), Ruby (RubyOnRails), o altro. Abbiamo infatti directory dedicate a configurazione, model/view/controller (MVC), eccetera. Non ci soffermeremo troppo su ciò, rimandandovi alla documentazione ufficiale (molto completa) per i dettagli.

L’unica configurazione realmente necessaria consiste nell’aprire il file application/config/config.php
e inserire la URL di base della nostra applicazione, ad esempio:

$config['base_url']    = 'http://www.example.com/';

(è importante che ci sia lo slash “/” finale). Se l’applicazione è in un sotto-path, va incluso anch’esso:

$config['base_url']    = 'http://www.example.com/miopath/';

Ecco un esempio di configurazione tipica in un ambiente di sviluppo:

$config['base_url']    = 'http://127.0.0.1/tutorial_codeigniter/';

Il primo Controller

Il Controller è uno dei tre design pattern che compongono la sigla MVC (Model-View-Controller). Il suo compito (sintetizzando al massimo) è quello di attuare un comando dell’utente, dirottandolo poi verso la visualizzazione più opportuna. Il nostro primo controller avrà un compito molto semplice:

  • in assenza di parametri mostrerà il classico messaggio “Hello, World!”;
  • passando un parametro name nella URL, sostituirà “World” con il valore di questo parametro.

Creiamo quindi il file application/controllers/hello.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Hello extends CI_Controller {
  function index() {
    echo '<html><body>';
    $name = $this->input->get('name');
    if ($name) {
      echo "Hello, <strong>$name</strong>!";
    }
    else {
      echo 'Hello, <strong>World</strong>!';
    }
    echo '</body></html>';
  }

}

 

Apriamo il browser e digitiamo l’indirizzo della nostra applicazione:

http://www.example.com/index.php/hello

Il risultato sarà una pagina con il solo messaggio “Hello, World!”, Se invece aggiungiamo il parametro name, avremo un saluto diverso:

http://www.example.com/index.php/hello?name=Dimitri

Questa chiamata produrra il messaggio “Hello, Dimitri!”.

Alcune osservazioni:

  • bisogna ricordarsi di sostituire http://www.example.com/ con la URL di base della propria applicazione (cfr. paragrafo “Configurazione” poche righe più sopra);
  • la prima riga di codice è un espediente di sicurezza che impedisce di caricare il file hello.php utilizzando la URL completa della pagina, ad esempio:
    http://www.example.com/application/controllers/hello.php
  • la classe di base CI_Controller ci mette a disposizione una variabile membro di nome $input, dalla quale possiamo estrarre i parametri passati con una richiesta HTTP di tipo GET.

In questo caso abbiamo utilizzato il controller sia per processare la richiesta che per creare la view; questa è una palese violazione del principio base di MVC, ovvero quello della separazione dei compiti. Il controller infatti non dovrebbe occuparsi di aspetti così specifici come la formattazione dell’output, compito che svolge in effetti male e con molta difficoltà: pensate cosa vorrebbe dire gestire da programma tutto il codice HTML di una pagina, un vero incubo!

Nel prossimo appuntamento vedremo quindi come utilizzare il meccanismo delle view, che consentono di formattare le pagine in ouput tramite PHP o addirittura dei template.

Link