Le blog du pangolin

Accueil > Programmation > PHP > CodeIgniter > Le framework CodeIgniter

Le framework CodeIgniter

lundi 5 septembre 2011, par Super Pangolin

Les principaux intérêts que j’ai trouvés à ce framework sont sa compatibilité PHP4 (de plus en plus rare) et son moteur de base de données.


Depuis la version 2, codeIgniter s’affranchit de PHP 4 et nécessite PHP 5.1.6

J’ai choisi ce framework plutôt que cakePHP (pourtant plus complet) car le projet se lequel je bosse nécessite une connexion à une base oracle qui m’a l’air un peu foireuse avec cakePHP.

On le trouve sur le site officiel http://codeigniter.com/.
L’installation est on ne peut plus simple : décompresser l’archive du framework à la racine du site et renseigner l’url dans le fichier system/application/config/config.php à la ligne :

$config[’base_url’] = "http://mondomaine/monsite"

La documentation est bien faite et disponible à l’adresse "http://mondomaine/monsite/user_guide".

Il est écrit en respectant le modèle "MVC" (modèle - ou accès aux données -, vues -ou affichage-, contrôleur -ou traitements).

Les fichiers que vous créerez seront dans l’arborescence située dans le répertoire system/application.

Les contrôleurs

Commençons par créer un contrôleur.
Dans le répertoire controllers, créer le fichier test.php avec le contenu suivant :

<?php
class Test extends CI_Controller {

        public function __construct(){
                parent::__construct();       
        }
       
        function index(){
                echo "Mon premier test codeIgniter.";
        }

       function message(){
                echo "Le pangolin vous salue.";
        }
}
?>

Vous remarquerez que le nom de ma classe commence par une majuscule, c’est une norme CI.
On y accède par l’URL "http://mon_serveur/mon_site/index.php/test".
Cette url va exécuter l’action par défaut : index.
Si on veut exécuter l’autre action, on ira à l’url "http://mon_serveur/mon_site/index.php/test/message".

Pour passer des paramètres à vos contrôleurs :

class Test extends CI_Controller {

        public function __construct(){
                parent::__construct();       
        }
       
        function index(){
                echo "Mon premier test codeIgniter.";
        }

       function message(){
                echo "Le pangolin vous salue.";
        }
       function passerParametres($param1, $param2){
                echo "Le $param1 vous $param2.";
        }
}

L’URL suivante :

http://mon_serveur/mon_site/index.php/test/passerParametres/president/vole

va afficher

Le president vous vole.

Afin d’empêcher l’exécution d’une méthode de votre contrôleur, vous pouvez bien sûr la rendre privée, mais si vous devez la laisser publique, vous pouvez empêcher son exécution par le moteur de rendu en faisant commencer son nom par un underscore. Par exemple :

class Test extends CI_Controller {

        public function __construct(){
                parent::__construct();       
        }
       
        function index(){
                echo "Mon premier test codeIgniter.";
        }

       function _message(){
                echo "Le pangolin vous salue.";
        }
}

Dans ce contrôleur, l’url

index.php/test/_message

renverra une erreur même si la méthode est publique.

Petite digression sur les URL

Si vous activez l’option « query string » ($config[’enable_query_strings’] = true ;) dans le fichier application/config/config.php, vous pourrez utiliser des url de la forme

http://monserveur/monFramework/index.php?c=monControleur&m=monAction

On peut améliorer les URL avec un peu de rewriting (donc pas possible chez free, dommage...). A la racine du framework (là où il y a le fichier index.php), créez le fichier ".htaccess" contenant le code suivant :

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Vous aurez ainsi de belles url de la forme

http://monserveur/monFramework/monControleur/monAction

Voila pour le fonctionnement des contrôleurs.

Passons aux

Vues.

Ce n’est rien de plus qu’un fichier PHP avec du HTML dedans.

Dans le répertoire views, créez le vichier vueTest2.php avec ce contenu :

<HTML>

    <head>
         <titre>Ma première vue</title>
    </head>

    <body>

         <H1>Ceci est ma première vue</H1>
         Et je suis content!!

    </body>
</HTML>

Pour afficher cette vue, il faut écrire le contrôleur qui va avec :

<?php
class Test2 extends CI_Controller {

        function __construct()
        {
                parent::__construct();       
        }
       
        function index()
        {
                $this->load->view('vueTest2');
        }
}
?>

On peut afficher autant de vues que l’on veut en enchaînant les load->view.

Pour passer des paramètres à notre vue (variables, tableaux, ...), on met toutes nos données dans un tableau :

$affichage['titre'] = "Vue avec paramètres";
$affichage['nom'] = 'Super Pangolin';
$affichage['liste'] = array('php', 'codeIgniter', jQuery', 'mySQL');

Dans notre vue, on accède à ces paramètres comme une variable PHP :

<?php echo $titre ?>

Tout comme le tableau

<?php foreach($liste as $indice => $element) { ?>
J'aime <?php echo $element; ?><br />
<?php } //--- Fin de foreach ?>

ou, avec la syntaxe alternative PHP :

<?php foreach($liste as $indice => $element): ?>
J'aime <?=$element; ?><br />
<?php enfforeach; ?>

Petite astuce

On ne peut pas accéder aux fonctions de CI dans les librairies que l’on crée.
Pour cela, il existe une astuce qui consiste à créer un objet CI :

$CI =& get_instance();

Avec ceci, vous avez la base pour débuter avec codeIgniter. La phase suivante passe par la gestion des données dans des modèles.

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.