101
CodeIgniter, le framework au service des Zéros Par Nestea et Triviak www.siteduzero.com Licence Creative Commons 6 2.0 Dernière mise à jour le 8/01/2013

370694 Codeigniter Le Framework Au Service Des Zeros

Embed Size (px)

Citation preview

  • CodeIgniter, leframework au service

    des ZrosPar Nestea

    et Triviak

    www.siteduzero.com

    Licence Creative Commons 6 2.0Dernire mise jour le 8/01/2013

  • Sommaire 2Sommaire ........................................................................................................................................... 2Lire aussi ............................................................................................................................................ 4 CodeIgniter, le framework au service des Zros ................................................................................ 4Partie 1 : Introduction .......................................................................................................................... 5La notion de framework ..................................................................................................................................................... 5Vous avez dit framework ? .......................................................................................................................................................................................... 5Introduction .................................................................................................................................................................................................................. 5Choisir son framework ................................................................................................................................................................................................. 6Frameworks et fonctionnalits .................................................................................................................................................................................... 6Le framework CodeIgniter ........................................................................................................................................................................................... 6Prsentation ................................................................................................................................................................................................................ 6Libraries et Helpers ..................................................................................................................................................................................................... 6En rsum ................................................................................................................................................................................................................... 6Prsentation de l'architecture MVC ................................................................................................................................... 7Dcouverte de l'architecture MVC ............................................................................................................................................................................... 7Le contrleur ............................................................................................................................................................................................................... 7Les vues ...................................................................................................................................................................................................................... 8Les modles ................................................................................................................................................................................................................ 8Rsum ....................................................................................................................................................................................................................... 8Le tableau .................................................................................................................................................................................................................... 9Le diagramme ............................................................................................................................................................................................................. 9Installation et configuration ...............................................................................................................................................

    10Tlchargement et installation .................................................................................................................................................................................. 10Tlchargement ........................................................................................................................................................................................................ 10Installation ................................................................................................................................................................................................................. 11Mise en place de l'arborescence ............................................................................................................................................................................... 11Les dossiers application et system ............................................................................................................................................................................ 12Le dossier assets ...................................................................................................................................................................................................... 12Le dossier application ............................................................................................................................................................................................... 12Configurons CodeIgniter ........................................................................................................................................................................................... 12Le fichier config.php .................................................................................................................................................................................................. 16Le fichier database.php ............................................................................................................................................................................................. 16Le fichier autoload.php ..............................................................................................................................................................................................

    18Partie 2 : Mise en place des cinq composants .................................................................................. 18Le contrleur ................................................................................................................................................................... 18Votre premire page .................................................................................................................................................................................................. 18Premier contrleur ..................................................................................................................................................................................................... 18Explication des URL .................................................................................................................................................................................................. 19En rsum ................................................................................................................................................................................................................. 19Fonctionnalits du contrleur .................................................................................................................................................................................... 19Crez d'autres pages ................................................................................................................................................................................................ 19Les variables $_GET ................................................................................................................................................................................................. 20Organisez vos contrleurs dans des dossiers .......................................................................................................................................................... 20Un contrleur orient objet ........................................................................................................................................................................................ 21Mthodes spciales ................................................................................................................................................................................................... 21La mthode index ...................................................................................................................................................................................................... 22Le constructeur .......................................................................................................................................................................................................... 23La mthode _output .................................................................................................................................................................................................. 24La mthode _remap ..................................................................................................................................................................................................

    24La vue .............................................................................................................................................................................. 25Votre premire vue .................................................................................................................................................................................................... 25Cration de la vue ..................................................................................................................................................................................................... 25Chargement de la vue ............................................................................................................................................................................................... 25Transfrer vos variables ............................................................................................................................................................................................ 27Quelques fonctionnalits sur les vues ....................................................................................................................................................................... 27Gestion des dossiers ................................................................................................................................................................................................. 27Charger plusieurs vues ............................................................................................................................................................................................. 27Sauvegarder le contenu de vos vues ........................................................................................................................................................................

    28Les helpers ...................................................................................................................................................................... 29Charger et utiliser les helpers ................................................................................................................................................................................... 29Charger un helper ..................................................................................................................................................................................................... 29Utilisation du helper url .............................................................................................................................................................................................. 30Fonction site_url ........................................................................................................................................................................................................ 30Fonction redirect ........................................................................................................................................................................................................ 31D'autres fonctions ...................................................................................................................................................................................................... 31Cration du helper assets ................................................................................................................................................................................... 32Fonction css_url ........................................................................................................................................................................................................ 32Fonction js_url ........................................................................................................................................................................................................... 32Fonction img_url ........................................................................................................................................................................................................ 32Fonction img .............................................................................................................................................................................................................. 33Notre helper assets ................................................................................................................................................................................................... 33Modifier un helper ...................................................................................................................................................................................................... 33Crer le fichier ........................................................................................................................................................................................................... 34Modification de la fonction site_url ............................................................................................................................................................................

    2/102

    www.siteduzero.com

  • 35Ajout de la fonction url ............................................................................................................................................................................................... 36Notre fichier MY_url_helper.php ................................................................................................................................................................................

    37Les bibliothques ............................................................................................................................................................ 38Utiliser une bibliothque ............................................................................................................................................................................................ 38Charger une bibliothque .......................................................................................................................................................................................... 40La bibliothque Session ............................................................................................................................................................................................ 40Fonctionnement des sessions de CodeIgniter .......................................................................................................................................................... 41Ajouter des lments ................................................................................................................................................................................................ 41Supprimer des lments ........................................................................................................................................................................................... 42Dconnexion ............................................................................................................................................................................................................. 42Flashdata ................................................................................................................................................................................................................... 42La bibliothque Form Validation ................................................................................................................................................................................ 43Dfinir les rgles des champs ................................................................................................................................................................................... 44Rcuprer vos valeurs .............................................................................................................................................................................................. 45Remettre les valeurs dans les champs et afficher les erreurs .................................................................................................................................. 45La bibliothque Database ......................................................................................................................................................................................... 46Retour sur la fonction site_url ................................................................................................................................................................................... 461re ligne ..................................................................................................................................................................................................................... 472e ligne ...................................................................................................................................................................................................................... 47En rsum .................................................................................................................................................................................................................

    47Le modle ........................................................................................................................................................................ 48Anatomie d'un modle ............................................................................................................................................................................................... 48Cration du modle ................................................................................................................................................................................................... 48Utiliser le modle ....................................................................................................................................................................................................... 49Renommer le modle ................................................................................................................................................................................................ 50Le modle de gestion des news ................................................................................................................................................................................ 51Le point sur Active Record ........................................................................................................................................................................................ 51Mthode ajouter_news .............................................................................................................................................................................................. 53Mthode modifier_news ............................................................................................................................................................................................ 54Mthode supprimer_news ......................................................................................................................................................................................... 55Mthode count ........................................................................................................................................................................................................... 56Mthode liste_news ................................................................................................................................................................................................... 56Notre modle de news ..............................................................................................................................................................................................

    59[TP] Un livre d'or .............................................................................................................................................................. 59Description du livre d'or ............................................................................................................................................................................................. 59Petit rappel ................................................................................................................................................................................................................ 59Descriptif des pages .................................................................................................................................................................................................. 59Avant de commencer ................................................................................................................................................................................................ 59Coup de pouce .......................................................................................................................................................................................................... 59Schma de la table ................................................................................................................................................................................................... 63Le systme de pagination ......................................................................................................................................................................................... 64Correction .................................................................................................................................................................................................................. 64Analyse et conception ............................................................................................................................................................................................... 65Le modle ................................................................................................................................................................................................................. 68Le contrleur et les vues ...........................................................................................................................................................................................

    74Partie 3 : Utilisations avances ......................................................................................................... 75L'outil Profiler ................................................................................................................................................................... 75Activer le profiler ....................................................................................................................................................................................................... 75Afficher le profiler ...................................................................................................................................................................................................... 76Raliser des tests de performance ........................................................................................................................................................................... 77Modifier l'ordre des diffrentes catgories ................................................................................................................................................................. 77Introduction ................................................................................................................................................................................................................ 77Rcrire les mthodes de CodeIgniter : la thorie .................................................................................................................................................... 78Rcrire les mthodes de CodeIgniter : la pratique .................................................................................................................................................. 80Ajouter les sessions .................................................................................................................................................................................................. 80Modification de la mthode run ................................................................................................................................................................................. 81Implmentation de la mthode _compile_session .................................................................................................................................................... 84Modifier le design du profiler .....................................................................................................................................................................................

    85Modification de la classe Model : le CRUD ..................................................................................................................... 86La thorie .................................................................................................................................................................................................................. 87Cration du prototype ................................................................................................................................................................................................ 88Implmentation des mthodes .................................................................................................................................................................................. 88La mthode count ..................................................................................................................................................................................................... 89Le mthode create .................................................................................................................................................................................................... 90La mthode update ................................................................................................................................................................................................... 91La mthode delete .................................................................................................................................................................................................... 91La mthode read .......................................................................................................................................................................................................

    93Mise en place des thmes .............................................................................................................................................. 93Prsentation de l'ide ................................................................................................................................................................................................ 94Implmentation des mthodes view et views ............................................................................................................................................................ 94Diffrence entre les deux mthodes .......................................................................................................................................................................... 94Implmentation de la mthode views ........................................................................................................................................................................ 95Implmentation de la mthode view .......................................................................................................................................................................... 95Les variables du layout .............................................................................................................................................................................................. 98Ajouter le CSS et le JavaScript ................................................................................................................................................................................. 98Les mthodes ajouter_css et ajouter_js .................................................................................................................................................................... 99Affichage des liens dans le layout ............................................................................................................................................................................. 99Modifier son thme ....................................................................................................................................................................................................

    100Mise en place de l'attribut ........................................................................................................................................................................................ 100Modification de la mthode view ............................................................................................................................................................................. 100Mise en place de la mthode set_theme ................................................................................................................................................................ 101Remerciements .......................................................................................................................................................................................................

    Sommaire 3/102

    www.siteduzero.com

  • CodeIgniter, le framework au service des Zros

    Par Triviak et Nestea

    Mise jour : 08/01/2013Difficult : Difficile Dure d'tude : 15 jours

    1 972 visites depuis 7 jours, class 70/799Vous en avez assez de repartir de zro chaque nouveau projet ? Vous voulez dvelopper rapidement et sans contrainte ? Voussouhaitez utiliser un framework rput pour ses performances sans avoir le configurer pendant une semaine, ni devoirrespecter sans arrt des conventions ?

    Eh bien, ami Zro, je vous accueille bras ouverts dans ce tutoriel sur CodeIgniter. Nous y dcouvrirons comment employer ceframework pour raliser vos sites. Au programme : architecture MVC, programmation oriente objet, bibliothques, helpers etbien d'autres choses !

    Pour suivre ce tutoriel, vous devez :avoir lu le tutoriel de M@teo21 ;avoir lu le tutoriel de vyk12 sur la programmation oriente objet ;ventuellement, connatre l'architecture MVC (ce sera un plus).

    C'est parti !

    Sommaire 4/102

    www.siteduzero.com

  • Partie 1 : Introduction

    Cette partie est essentiellement compose de thorie. Je vous recommande de lire attentivement ces trois chapitres, car ils sonttrs importants pour bien comprendre ce que nous allons tudier tout au long de ce tutoriel.

    Nous verrons, dans un premier temps, la dfinition d'un framework et les avantages de CodeIgniter. Ensuite, nous nousintresserons l'architecture MVC qui nous permettra de structurer notre application web. Enfin, nous tlchargeronsCodeIgniter pour l'initialiser ensuite afin de le prparer aux parties suivantes.

    La notion de frameworkDans ce chapitre, nous allons dfinir ce qu'est un framework. Ensuite, nous nous attarderons sur les possibilits de CodeIgniteret ce qui fait de lui un framework trs rput.

    Vous allez pouvoir dcouvrir plus prcisment CodeIgniter, mais aussi dterminer si celui-ci est fait pour vous. Chaque frameworkpossde des avantages et des inconvnients. vous de faire votre choix parmi la multitude de frameworks PHP dj prsentssur le net.

    Vous avez dit framework ?Introduction

    C'est bien joli, tout a, mais tu ne nous as toujours pas dit ce qu'tait un framework !

    En effet, mais je vais le faire tout de suite.

    Citation : WikipdiaEn programmation informatique, un framework est un kit de composants logiciels structurels, qui dfinissent les fondationset les grandes lignes de l'organisation de tout ou partie d'un logiciel (architecture).

    Autrement dit, un framework PHP est un ensemble de codes qui fournit une organisation ainsi qu'un grand nombre defonctionnalits , dont le nombre et la qualit diffrent selon les frameworks. Ainsi, la matrise d'un framework vous permet de nevous occuper que de votre site et de laisser le reste d'autres dveloppeurs, c'est--dire sa base, son socle, mais aussi tout cequi s'articule autour : les classes, les fonctions, etc.

    Choisir son frameworkChoisir un framework n'est pas une chose aise : il en existe un nombre important, dont au moins une bonne dizaine sont de trsbonne qualit.

    Mais alors, comment choisir ?

    L, c'est une affaire de got. Cependant plusieurs paramtres sont prendre en compte. Il n'y a pas que ceux-ci, mais c'est djun bon dbut.

    Votre style de programmation : tes-vous plutt procdural ou orient objet ? En PHP, comme dans tout langage deprogrammation, chacun a son style.Votre organisation : avis tous les Zros bordliques, c'est peut-tre la fin de vos ennuis. La conception del'organisation diffre d'un codeur l'autre. Certains prfrent avoir une arborescence profonde et stricte, d'autresprfrent la possibilit de placer leurs fichiers n'importe o, comme bon leur semble.Les fonctionnalits mises en avant par le framework : chacun propose un nombre plus ou moins important defonctionnalits. Ne tombez pas dans le pige de l'usine gaz ! Choisissez votre framework raisonnablement. Cela ne sert rien de choisir un framework trop sophistiqu si vous n'utilisez pas toute sa puissance (ou du moins une partieconsquente).La communaut et la rputation : en effet, quoi qu'on en dise, si le framework est connu, c'est souvent un gage dequalit. Une communaut active, c'est la garantie que le framework continuera fournir des mises jour.

    CodeIgniter, le framework au service des Zros 5/102

    www.siteduzero.com

  • Cette liste n'est pas exhaustive. Ce sont simplement des pistes de rflexions.

    Frameworks et fonctionnalitsVoici quelques exemples de fonctionnalits que j'ai pu rencontrer dans des frameworks PHP qui peuvent tre dcisifs :

    ORM pour simplifier la gestion des bases de donnes ;internationalisation ;aide pour l'AJAX ;gestion des droits (administrateur, modrateur, membre, etc.) ;gestion de formats varis : XHTML, XUL, RSS, ATOM, RDF, ZIP, XML, PDF, etc. ;et bien d'autres encore.

    Certaines peuvent paratre indispensables, alors que d'autres vous sembleront inutiles. Comme je l'ai dit dans l'introduction, c'est vous de faire votre choix !

    Le framework CodeIgniterPrsentation

    Maintenant que vous savez ce qu'est un framework, nous allons pouvoir enfin parler de CodeIgniter.

    Avant toute chose, il faut savoir que CodeIgniter n'est pas une usine gaz. Et pour cause, il a t conu dans le but de ne fournirque le strict minimum. Tout le reste est entirement optionnel (mme les bibliothques grant les bases de donnes et lessessions le sont).

    Cela lui permet donc d'tre doublement rapide. D'une part, sur le temps d'apprentissage du framework : vous verrez que vousvous sentirez trs vite l'aise. D'autre part, sur le temps de gnration de votre page. Autant vous le dire tout de suite,CodeIgniter se retrouve souvent en trs bonne position dans les benchmarks (je ne pourrai pas vous en dire plus sur ce point,au risque de ne plus tre objectif).

    Libraries et HelpersCela dit, j'espre que vous ne croyez pas que ce tutoriel se finira au bout de trois malheureux chapitres ! Le socle initial permetaux codeurs d'inclure des bibliothques et des fonctions fournies par CodeIgniter. Et vous allez le voir, elles sont nombreuses.Vous trouverez la liste ici.

    La colonne Class Reference regroupe des classes que vous pourrez utiliser lorsque vous en aurez besoin. Vous y trouvereznotamment les plus importantes :

    config pour rcuprer toute votre configuration. Vous allez pouvoir personnaliser votre framework ;database pour les bases de donnes. Nous la dcouvrirons en douceur, car elle est assez consquente ;form_validation pour simplifier la vrification des formulaires. Une fois que l'on y touche, on ne peut plus s'en passer ;session pour les sessions. CodeIgniter n'utilise pas les sessions natives mais son propre systme. Je vous rassure, cen'est pas plus compliqu pour autant.

    Bien entendu, je ne vous montre qu'une fraction des bibliothques. Sachez aussi qu'il est possible de crer ses propres classes etmme de modifier le comportement de celles fournies par CodeIgniter. Vous verrez, c'est extrmement utile.

    Si vous retournez sur ce lien, vous verrez une colonne Helper Reference. Les helpers sont tout simplement des ensembles defonctions regroupes par thme. Ici encore, nous allons pouvoir crer nos propres helpers et mme redfinir les fonctions deCodeIgniter lorsqu'elles ne nous plairont pas. Nous avons donc des fonctions pour gnrer nos URL, gnrer nos formulaires,insrer des smileys ou encore utiliser un catpcha. Mais pas de panique, il ne s'agit que de simples fonctions.

    En rsumSi l'on devait rsumer le framework en une phrase, on dirait que CodeIgniter est une base rduite en fonctionnalits maishautement performante, pouvant faire appel des classes et des fonctions trs compltes lorsque le besoin s'en fait sentir.Maintenant que vous en savez plus sur CodeIgniter, nous allons pouvoir nous intresser l'organisation de nos fichiers avecl'architecture MVC.

    CodeIgniter, le framework au service des Zros 6/102

    www.siteduzero.com

  • Prsentation de l'architecture MVCSi vous dveloppez en PHP depuis un certain temps, vous avez srement d entendre parler de l'architecture MVC. Non ? Ehbien, si ce n'est pas le cas, vous apprendrez trs vite vous en servir. Vous verrez, ce n'est pas spcialement compliqu, il suffitd'tre mthodique.

    Si vous connaissez cette architecture, lisez tout de mme ce chapitre. Il se peut que vous y trouviez des informationsintressantes.

    Dcouverte de l'architecture MVCMVC est l'acronyme de Modle-Vue-Contrleur ! Autrement dit, nous allons sparer notre application en au moins trois parties.

    Mais pourquoi ?

    Eh bien parce que cela va nous permettre de mieux nous organiser !Il est vrai qu'au dbut, vous n'en verrez pas tout de suite l'intrt. Mais lorsque votre site web commencera prendre del'ampleur, vous devrez par exemple changer de design, changer le SGBD de votre base de donnes ou encore ajouter un groupeVIP. Toutes ces modifications annoncent de trs lourds changements si vous ne savez exactement o se situe le code modifier.

    Nous allons justement aborder une organisation robuste compose de trois couches d'abstraction.Le contrleur

    Le contrleur est ce qui va tre appel en premier. Il n'y a qu'un seul contrleur par URL. Donc, deux URL diffrentes appellerontdeux contrleurs diffrents.

    Le contrleur se charge d'appeler tous les composants : bibliothques, helpers, vues, modles, mais aussi de faire lesnombreuses vrifications ncessaires .

    Voici quelques exemples de fonctionnalits que peut fournir un contrleur.Vrifier si le formulaire a bien t rempli.Vrifier si le visiteur a bien le niveau requis pour voir la page (administrateur par exemple).Changer le design selon les prfrences du visiteur (via un cookie, par exemple).Contrler les tokens (ou jetons) de scurit. Si vous ne connaissez pas ces petites btes, ce n'est pas grave (tout dumoins pour ce tutoriel).

    Le contrleur sera donc la partie la plus importante pour le dveloppeur PHP. Tout ce qui se passe dans le contrleur serainvisible aux yeux des visiteurs. Le contrleur n'a pas pour rle d'envoyer au navigateur un message d'erreur, il a pour rle detrouver cette erreur. L'affichage de cette erreur se fera via une autre couche d'abstraction.

    Avec CodeIgniter, vous verrez que chaque contrleur est une classe qui est appele selon l'URL. Et comme toute classe qui serespecte, elle possde un certain nombre de mthodes qui reprsenteront les diffrentes actions que le contrleur peut effectuer.

    Par exemple, si on a cette URL : http://nomdedomaine.tld/news/voir_news.html, cela signifie que CodeIgniter doit appeler dans laclasse News la mthode voir_news. C'est donc l'URL qui appelle le contrleur.

    Les vuesLes vues sont directement responsables de tout ce que l'on va envoyer aux navigateurs . Les vues seront donc composesprincipalement de HTML. Nous y trouverons aussi du PHP qui nous servira pour afficher des variables et faire quelquesboucles.

    CodeIgniter, le framework au service des Zros 7/102

    www.siteduzero.com

  • Il n'y a pas de limite au nombre de vues. Alors qu'avec les contrleurs, nous avions une URL par contrleur, ici, nous pouvonstrs bien avoir cinq vues par contrleur. Le rle du contrleur est aussi d'appeler la bonne vue. De plus, rien n'empche lecontrleur de faire appel plusieurs vues.

    Cette relation est reprsente sur le schma par un trait plein allant du contrleur la vue.

    Sur ce mme schma, vous pouvez voir un trait en pointill : il s 'agit d'un flux indirect. Il est possible, au lieu d'afficher lavue au moment o le contrleur l'appelle, de sauvegarder son contenu dans une variable, en vue de le stocker dans unfichier par exemple. Ce n'est utile que dans certains cas trs particuliers.

    Par exemple, pour la page d'accueil de l'administration d'un site, nous pourrons trouver ce genre de vues :une vue contenant le formulaire de connexion la zone administrateur ;une vue contenant un message d'erreur ;une vue contenant la page d'administration.

    Le rle de la vue s'arrte l. C'est au contrleur de savoir quelle est la vue qu'il doit charger.Les modles

    Cette dernire couche d'abstraction permet de faire le lien entre le contrleur et la base de donnes . Il est toujours conseill desparer convenablement les requtes que vous envoyez la base de donnes et les instructions qui vont utiliser ces donnes.

    Le modle permettra donc d'envoyer des requtes la base de donnes et d'en retourner le rsultat sous forme brute (sansHTML). Nous y trouverons donc des fonctionnalits typiques des bases de donnes (ajouter, modifier, supprimer...).Dans la plupart des cas, si les bases de donnes ont bien t penses, il y aura un modle pour chaque table.

    Prenons l'exemple d'une table sauvegardant des news. Le modle associ cette table devra tre compos de ces fonctionnalits:

    ajouter ;modifier ;supprimer ;nombre_news ;liste_news ;news.

    Eh bien, pour raliser cela avec CodeIgniter, vous allez devoir crer une classe que nous appellerons News_model, et nousimplmenterons toutes les mthodes dont nous aurons besoin pour manipuler les news dans la base de donnes. Il nous suffiraalors d'excuter les mthodes de ce modle depuis le contrleur.

    Pour en finir avec les modles, il faut que vous sachiez qu'il est facultatif. Vous avez la possibilit de n'en inclure aucun. Ce n'estpas obligatoire de charger un modle dans le cas o vous ne souhaitez pas excuter de requtes avec votre base de donnes.Mais nous aurons l'occasion d'en parler plus en dtail par la suite.

    RsumLe tableau

    Dornavant, quand vous dvelopperez avec CodeIgniter, vous devez avoir le tableau suivant dans la tte.

    Nom de lacouche Rle de la couche

    Contrleurs C'est le cur de votre application. Ce sont eux qui seront appels en premier. Ils seront l'intermdiaire entre lesmodles, les vues et toute autre forme de ressources.Vues Principalement composes de code HTML, elles permettent de renvoyer le code aux visiteurs.Modles Facultatifs, ils permettent d'envoyer des requtes la base de donnes.

    Bibliothques La plupart sont facultatives. Ce sont des classes qui permettent de nous aider. La bibliothque de vrificationdes formulaires est un trs bon exemple.Helpers Ce ne sont que des fonctions classes par thme.

    CodeIgniter, le framework au service des Zros 8/102

    www.siteduzero.com

  • Le diagrammeVoici un schma trs bien fait extrait de la documentation. Il illustre le fonctionnement de CodeIgniter.

    Ordre Nom Description1 index.php Ce sera toujours le fichier index.php, situ la racine du rpertoire, qui sera appel en premier.

    2 RoutingC'est le routeur. C'est lui qui rcuprera l'URL et la dcomposera en actions. Il a pour rle de trouver lecontrleur appeler. Nous verrons dans la suite de ce tutoriel que nous pouvons modifier soncomportement.

    3 CachingUne fois que le routeur a fini son travail, le module de cache va regarder s'il existe des fichiers mis encache pour cette action. Dans le cas d'une rponse positive, ces fichiers vont tre renvoys aunavigateur.

    4 Security Cette partie va scuriser toutes les donnes entrantes : cookies, variables get, post, etc. C'est la derniretape avant le contrleur.

    5 ApplicationController Ce sera ici que nous commencerons dvelopper.

    6ModelsLibrariesHelpers

    Comme vous le voyez, le contrleur fait appel diffrents lments qui vont leur renvoyer des donnes.

    7 View Les vues sont les fichiers qui contiennent le code HTML.

    Si vous tes attentifs, vous avez d voir que je n'ai pas du tout parl des plugins. En effet, les plugins ont tsupprims depuis CodeIgniter 2.0, mais l'image n'en reste pas moins trs intressante.

    Et voil, maintenant que vous connaissez le framework et ses grandes lignes, nous allons enfin pouvoir le tlcharger et leconfigurer. J'espre que ces deux chapitres ne vous ont pas trop ramollis, parce qu' partir de maintenant, il n'y aura plus dechapitre thorique. Ce sera vous de travailler !

    CodeIgniter, le framework au service des Zros 9/102

    www.siteduzero.com

  • Installation et configurationVoici enfin venu le moment o vous allez pouvoir tlcharger CodeIgniter et ouvrir votre diteur de texte.

    Au menu : tlchargement, installation, dcouverte de l'arborescence et configuration. table !

    Nous ne toucherons pas toutes les cls de configuration. Vous comprendrez davantage d'lments lorsque vous serezhabitus au framework.

    Tlchargement et installationTlchargement

    Rendez-vous sur le site officiel de CodeIgniter pour pouvoir tlcharger le framework, et plus exactement dans la rubriquedownloads. Vous devriez normalement voir un gros bouton Download CodeIgniter . l'heure o j'cris ces lignes, la versionactuelle est la 2.0.2. Bien entendu, prenez la dernire version.

    Pendant que j'y suis, j'en profite aussi pour vous donner le lien de la documentation. S'il y a bien un lien qu'il faut mettre dansvos favoris, c'est celui-ci.

    Une fois qu'elle sera tlcharge, il faudra dcompresser l'archive et placer le dossier portant le mme nom que la version dansvotre rpertoire web. Vous pouvez le placer o vous voulez. Pour les besoins du tutoriel, j'ai renomm le dossier en codeIgniter etje l'ai plac dans mon rpertoire www.

    InstallationVous allez voir, l'installation va tre trs rapide.

    Quelques modificationsDans votre dossier (que j'ai appel codeIgniter), vous avez normalement deux fichiers : index.php et licence.txt. Vous pouvez fairece que bon vous semble de la licence.Ensuite, vous avez la documentation dans le dossier user_guid. Vous pouvez aussi en faire ce que bon vous semble.

    index.phpMaintenant, vous allez ouvrir le fichier index.php. La premire chose configurer est de dfinir si le framework est actuellementen priode de dveloppement, de test ou de production. La consquence immdiate est l'affichage ou non des erreurs.Normalement, la constante est dj sur development.

    Code : PHP - ./index.php

  • connaissiez que l'aspect utilisateur du framework.Un des avantages de l'utilisation d'un framework est la facilit de travailler plusieurs, car chacun sait comment lesystme fonctionne. Mais si vous modifiez les sources de CodeIgniter, son comportement ne sera plus le mme.

    Nous verrons par la suite comment effectuer ces changements sans toucher ce dossier.

    Le dossier assetsAvant de dcrire prcisment le contenu du dossier application, vous allez crer un dossier assets, toujours dans le mmedossier que le fichier index.php. Et l'intrieur de celui-ci, crez aussi les dossiers css, javascript et images.

    Vous disposez maintenant d'une arborescence trs claire.assets contiendra toutes les ressources qui vont tre tlcharges par les visiteurs. Par exemple, les feuilles de styleexternes (CSS), les fichiers JavaScript et les images. Cependant, vous pouvez aussi ajouter des dossiers tels quemusiques, videos, xml (pour les flux RSS, les animations flash). C'est comme si vous alliez faire un copier-coller de cedossier dans l'ordinateur de vos visiteurs. Rien ne doit tre confidentiel.system contient les sources de CodeIgniter, vous ne devez pas y toucher.application contiendra tous vos scripts, qu'il faudra placer dans les bons dossiers. C'est ce que nous allons voir tout desuite.

    Le dossier applicationVoici l'arborescence du dossier application avec les explications des dossiers dont nous nous servirons dans la prochaine partie.

    config : ce sont des fichiers permettant de configurer CodeIgniter ou une bibliothque.Certains sont inclus automatiquement, d'autres seulement lorsque vous les demandez.controllers : ce dossier contiendra tous nos contrleurs.errors : ce sont les pages d'erreurs. Libre vous de les personnaliser selon votredesign.helpers : c'est le rpertoire pour vos helpers. Les helpers fournis avec CodeIgnitersont situs dans le dossier system.hooks : c'est un dossier qui contient des fichiers assez complexes. Ils permettentd'excuter des scripts diffrents moments du processus d'excution de CodeIgniter.language : ce rpertoire contiendra tous vos fichiers de langue dans le cas o voussouhaitez un site internationalis.libraries : nous placerons nos bibliothques dans ce dossier. Comme les helpers, lesbibliothques fournies par CodeIgniter sont situes dans un autre dossier.models : le rpertoire des modles.views : le rpertoire des vues.

    En respectant les emplacements des diffrents fichiers, vous gagnerez en clart.Configurons CodeIgniterCertes, l'installation est termine, mais il reste encore certains points dfinir.

    Le fichier config.phpCe fichier de configuration est le cur de la configuration du framework. Il se trouve dans le dossier./application/config/. Je ne vais pas dcrire tous les points mais sachez que nous allons aborder les plus importants.

    base_urlC'est l'URL que vous devez taper pour accder au fichier index.php. Dans mon cas, ce sera :

    Code : PHP - ./application/config/config.php

  • /*|--------------------------------------------------------------------------| Base Site URL|--------------------------------------------------------------------------*/$config['base_url'] = "http://localhost/codeIgniter/";

    index_pagePar dfaut, la valeur est index.php. Nous allons voir que CodeIgniter gnre par dfaut des URL de cette forme-l :http://localhost/codeIgniter/index.php/classe_controleur/methode_controleur/.

    Problme, ce index.php n'est pas des plus jolis. Pour le masquer, il y a une solution : l'URL rewriting . Si vous avez activ cemodule, alors vous pouvez crer un fichier .htaccess ct du index.php contenant ce code :

    Code : Apache - ./.htaccess

    # Empche la visualisation de l'arborescence, n'a rien voir avecle masquage du index.php .Options -Indexes

    # Active le module de rcriture d'URL.RewriteEngine on

    ## Fixe les rgles de rcriture d'URL. Ici, nous utilisons uneliste blanche.#

    # Toutes les URL qui ne correspondent pas ces masques sontrcrites.RewriteCond $1 !^(index\.php|assets/|robots\.txt)

    # Toutes les autres URL vont tre rediriges vers le fichierindex.php.RewriteRule ^(.*)$ index.php/$1 [L]

    Une fois cela fait, vous pouvez vider la variable index_page puisque les URL seront rediriges vers ce fameux fichierindex.php.

    Code : PHP - ./application/config/config.php

  • url_suffixC'est le suffixe que vous voulez donner vos URL. Vous pouvez donner n'importe quoi. CodeIgniter l'ignorera...Dans mon cas, je vais choisir l'extension html. Vous pourrez tout aussi bien ne rien mettre. C'est facultatif.

    Code : PHP - ./application/config/config.php

  • Vous pouvez aussi configurer l'utilisation des sessions .

    Voici ce que vous pouvez paramtrer :

    Code : PHP - ./application/config/config.php

  • Lorsque que vous tes en dveloppement, dsactivez cette fonctionnalit car si vous ne respectez pas les standards duMVC, votre page ne s'affichera pas. Il est courant d'utiliser la fonction var_dump un peu n'importe o. Cependant, sivous affichez des donnes l'extrieur des vues, l'affichage de votre page plantera.

    Maintenant que cela est fait, nous allons configurer notre base de donnes.

    Le fichier database.phpDans ce fichier, vous noterez vos identifiants et le mot de passe de connexion votre base de donnes.

    Code : PHP - ./application/config/database.php

  • Lorsque vous connatrez plus de bibliothques, ou que vous aurez besoin d'inclure les vtres, vous pourrez les ajouter la suite.

    HelpersNous allons aussi charger un helper : url. Il nous permettra d'crire des URL en fonction des paramtres que vous aurez dfinisdans le fichier ./application/config/config.php. En utilisant ces fonctions, toutes vos URL seront instantanmentmodifies si la valeur de $config['base_url'] est modifie.

    Code : PHP - ./application/config/autoload.php

  • Partie 2 : Mise en place des cinq composants

    La partie traitant de l'installation et de la configuration est maintenant derrire vous ! Vous allez pouvoir rellement dcouvrir leframework.

    L'utilisation d'un framework n'tant pas vidente, je vous conseille de prendre l'habitude de faire rgulirement des testschez vous. Vous mmoriserez bien plus facilement.

    Le contrleurDans cette partie, nous allons crer notre premire page avec CodeIgniter.

    Pour rappel, le contrleur est ce qui sera charg en premier dans votre application. C'est lui qui fera les vrifications. Ilaura accs aux sessions et toutes les donnes transitant entre le navigateur et le serveur : get, post, cookie, etc.

    Votre premire pagePremier contrleur

    Je vois que vous bouillez d'impatience de crer votre premier contrleur, alors le voici :

    Code : PHP - ./application/controllers/forum.php

  • L'URL sans le index.phpDans le chapitre prcdent, je vous ai dit que vous pouviez activer l'URL rewriting pour masquer l'appel au fichier index.php. Sivous avez fait cela, votre URL sera alors : http://www.nomdedomaine.tld/forum/accueil.html.

    Rassurez-vous, il existe des fonctions toutes prtes pour construire nos URL !

    En rsumUn contrleur est donc un fichier qui contient une unique classe et ce sera son nom qui s'affichera dans l'URL.

    Pour que CodeIgniter puisse savoir o est situ le contrleur appeler, vous devez nommer votre fichier du mme nomque votre classe mais sans la majuscule. De plus, le nom de la classe doit toujours commencer par une majuscule.

    Fonctionnalits du contrleurCrez d'autres pages

    Vous avez la possibilit de crer d'autres mthodes qu'accueil.Exemple avec ce contrleur :

    Code : PHP - ./application/controllers/forum.php

  • class Forum extends CI_Controller{ public function accueil() { echo 'Hello World!'; }

    // Cette page accepte une variable $_GET facultative public function bonjour($pseudo = '') { echo 'Salut toi : ' . $pseudo; }

    // Cette page accepte deux variables $_GET facultatives public function manger($plat = '', $boisson = '') { echo 'Voici votre menu : '; echo $plat . ''; echo $boisson . ''; echo 'Bon apptit !'; }}

    Ces URL seront tout fait correctes : forum/accueil/forum/bonjour/Arthur.htmlforum/manger/Hamburger-frites/coca.html

    Alors, ce n'est pas joli, la POO ?

    Ainsi, votre site web se dcoupera en contrleurs, qui auront chacun des mthodes. L'ensemble formera votre site. Voici unexemple :

    User Accueil Forumaccueil accueil accueil

    inscription faq categoriedesinscription reglement voir_post

    connexion plan voir_messagedeconnexion contact

    profil

    Si vous aviez dj pris l'habitude de dcouper votre site en modules (news, forum, livre d'or...), alors la migration versCodeIgniter sera rapide. En revanche, si vous aviez opt pour quelque chose d'un peu plus exotique, dites-vous qu'au moinsvotre site sera dornavant plus organis.

    Organisez vos contrleurs dans des dossiersDans le cas o vous crez un gros projet qui ncessite de nombreux contrleurs, CodeIgniter vous autorise les placer dans desdossiers . Cependant, vous vous doutez bien que ce n'est pas aussi simple que cela.Si, par exemple, vous voulez placer 3 contrleurs dans un dossier forum , alors votre URL devra afficher le paramtre forum en premier, avant le nom du contrleur : forum/contrleur/mthode/

    Un contrleur orient objetN'oubliez pas que le contrleur n'est pas uniquement un moyen de classer ses pages ! Il s'agit avant tout d'une classe.

    Partie 2 : Mise en place des cinq composants 20/102

    www.siteduzero.com

  • Autrement dit, vous pouvez lui donner des attributs et mme des mthodes prives . Si, dans votre contrleur, vous devezexcuter rgulirement les mmes instructions, crez une mthode prive pour viter la redondance de votre code. Si votremthode est prive, elle ne sera pas accessible par l'URL (tout comme les mthodes commenant par un underscore _).

    Mthodes spcialesCodeIgniter a prvu pour vous certaines particularits dans les contrleurs. Nous allons les voir tout de suite.

    La mthode indexCette mthode a la particularit d'tre appele dans le cas o votre URL ne spcifie pas de nom de mthode.

    Un exemple est toujours plus parlant :

    Code : PHP - ./application/controllers/forum.php

  • J'ai appel cette technique redirection interne , car elle est invisible depuis un navigateur.

    Le constructeurEncore une mthode intressante, le constructeur. Dans les contrleurs, vous utiliserez cette mthode pour effectuer des tchesd'initialisation. Autrement dit, vous allez placer tout le code qui devra tre excut chaque fois que vous allez sur l'une despages de ce contrleur. C'est particulirement utile si vous devez initialiser des attributs ou charger des bibliothques et deshelpers (que nous verrons plus loin).

    Une petite remarque : si vous implmentez le constructeur, vous devez absolument excuter le constructeur de la classe mreavant de commencer votre code.

    Exemple :

    Code : PHP - ./application/controllers/forum.php

  • if( ! isAdmin())exit("Vous n'avez pas le droit de voir cette page."); } public function activer_maintenance() { /* ---- */ }

    public function ajouter_rang() { /* ---- */ }}

    Cela permettra de faire rapidement le tri entre les administrateurs et les autres. vous d'utiliser cette mthode comme bon voussemble.

    La mthode _outputLa mthode _output vous permet de manipuler une dernire fois les donnes que vous allez envoyer au navigateur.

    Cette fonction n'est pas accessible depuis le navigateur, car elle est prcde d'un _ (underscore).

    Output en anglais signifie sortie .

    Code : PHP - ./application/controllers/forum.php

  • La mthode _remap_remap est une mthode trs puissante. Elle vous permet de modifier la mthode que vous allez utiliser. Autrement dit, faire uneredirection interne un peu plus dans le style de CodeIgniter. Nous allons voir un exemple d'utilisation de cette fonctionnalit maisnous l'tudierons plus en dtail dans le chapitre portant sur le routeur.

    Voici un exemple d'utilisation. Nous allons rediriger toutes les URL du contrleur vers la page de maintenance.

    Code : PHP - ./application/controllers/home.php

  • La vueVous savez maintenant comment crer des contrleurs avec CodeIgniter. Maintenant, nous allons aborder les vues.

    Les vues sont composes de code HTML et d'un peu de PHP. Ce sont les donnes qui sont envoyes au navigateur.

    Votre premire vueCration de la vue

    Pour crer une vue, vous devez tout d'abord crer un fichier dans le dossier ./application/views/. Placez-y tout ce quevous voulez.

    Dans mon cas, je vais crire ce contenu dans un fichier vue.php :

    Code : PHP - ./application/views/vue.php

    Bonjour

    Ceci est mon paragraphe !

    Rien de particulier. Un titre et un paragraphe.

    Chargement de la vueLorsque vous avez fini de crer votre vue, vous devez l'afficher via le contrleur. Voici comment il faut faire.

    Code : PHP - ./application/controllers/news.php

  • { public function index() { $this->accueil(); }

    public function accueil() { $data = array(); $data['pseudo'] = 'Arthur'; $data['email'] = '[email protected]'; $data['en_ligne'] = true;

    $this->load->view('vue');}}

    Maintenant que nous avons notre tableau de variables, nous allons pouvoir le donner la vue. Pour cela, il faut utiliser le 2eargument de la mthode view.

    Code : PHP - ./application/controllers/news.php

  • Votre email est .

    Vous tes en ligne.

    Vous n'tes pas en ligne.

    Maintenant, vous savez comment transfrer des variables du contrleur la vue.Quelques fonctionnalits sur les vuesGestion des dossiers

    Vous avez la possibilit de crer des dossiers dans le rpertoire views. Une bonne habitude consiste classer ses vues enfonction du contrleur. Autrement dit, vous allez placer toutes les vues du contrleur News dans le dossier./application/views/news/.

    Pour appeler ces vues, vous devrez donner le chemin relatif avant le nom de la vue afficher.

    Code : PHP - Un contrleur

  • Pour rsoudre cela, vous pouvez utiliser le 3e argument de la mthode view. C'est un boolen. Si sa valeur est false (dfaut),alors la vue sera affiche. Par contre, si la valeur est true, alors cette mthode retournera le contenu de la vue mais ne l'afficherapas.

    Code : PHP - ./application/controllers/

  • Les helpersComme je vous l'ai dit dans la partie I, les helpers constituent un ensemble de fonctions runies par thme. Vous n'allez donc pascharger une fonction la fois mais un ensemble de fonctions.

    Nous allons donc voir comment charger un helper. Ensuite, nous apprendrons crer les ntres et mme modifier les helpersnatifs.

    Charger et utiliser les helpersPour charger un helper, vous allez voir, c'est trs simple. Et pour les utiliser, c'est encore plus simple, car il ne s'agit que desimples fonctions. J'espre que vous tes au point avec les fonctions...

    Charger un helperPour charger un helper depuis un contrleur, nous allons utiliser cette instruction :

    Code : PHP - Dans un contrleur

  • parent::__construct(); // Dcommenter cette ligne pour charger le helper url //$this->load->helper('url'); } public function accueil() { // On inclut la vue ./application/views/test/accueil.php $this->load->view('test/accueil'); }

    Code : PHP - ./application/views/test/accueil.php

    Test

    Fonction site_urlNous allons commencer par la fonction la plus importante : site_url.Cette fonction permet de retourner une URL. C'est donc avec cette fonction que nous allons crer toutes les URL partir demaintenant.

    Pourquoi ?

    Car cela va rendre vos URL beaucoup moins dpendantes de votre environnement, et donc beaucoup plus flexibles !

    En utilisant cette fonction, vous ne devrez plus donner votre nom de domaine, ni le fichier index.php (imaginez que vous changezd'hbergeur et qu'il n'y ait plus l'URL rewriting), ni l'extension. Vous tes libres de modifier toutes vos URL en mme temps grce cette fonction.Dsormais, je l'utiliserai constamment pour poursuivre ce tutoriel.

    Il y a deux faons de construire son URL : avec une chane de caractres et avec un tableau.

    Code : PHP - ./application/views/test/accueil.php

    Test

  • La fonction redirect fonctionne de la mme manire que site_url. Elle permet d'effectuer une redirection de type location . Elleaccepte en paramtre une chane de caractres ou un tableau.

    Code : PHP - ./application/controllers/test.php

  • veiller l'inclure soit via l'autoloader, soit depuis votre contrleur avant de l'utiliser.

    Fonction css_urlCette fonction attend un paramtre qui devra tre une chane de caractres. Il nous suffit donc simplement d'ajouter le nom dedomaine avant, puis le chemin, ensuite le paramtre et enfin l'extension.Le nom de domaine sera rcupr via la fonction base_url.

    Eh bien allons-y !

    Code : PHP - ./application/helpers/assets_helper.php

  • Une fonction ne vous convient pas dans un helper ? Vous avez envie de rajouter une fonction dans un helper ? Voyons tout desuite comment nous allons faire.

    Retournez dans votre fichier de configuration (config.php) et cherchez cette ligne :

    Code : PHP - ./application/config/config.php

  • connexionurl('Page de connexion', 'user', 'connexion');

    Voici le code de cette fonction.

    Code : PHP - ./application/helpers/MY_url_helper.php

  • array_shift($uri); } echo '' . htmlentities($text) .''; return ''; }}

    /* End of file MY_url_helper.php *//* Location: ./application/helpers/MY_url_helper.php */

    Pourquoi la surcharge du helper url possde-t-elle toujours les conditions d'existence des fonctions ?

    Question tout fait lgitime. J'y rpondrai par une autre question : et si quelqu'un voulait rcrire les fonctions que nous avonsrcrites ?

    C'est tordu, non ? En fait, si vous voulez rcrire encore une fois les fonctions, vous n'allez pas passer par un troisime fichier.Vous allez rcrire les fonctions de votre fichier, celui qui est dans le dossier application.

    Donc a ne sert rien ?

    Non plus ! Je vais reformuler une autre question : et si quelqu'un voulait rcrire les fonctions que nous avons rcrites maisseulement une seule fois ? Bon, je vous l'accorde, je ne l'ai encore jamais fait, mais c'est tout de mme plus propre. a vite lesrisques de redfinir une fonction qui est dj dfinie dans un autre helper.Cette partie vous a permis de bien comprendre la notion de helpers dans CodeIgniter. N'hsitez pas crer les vtres si votrecode devient trop redondant.

    Cependant, l'utilisation de helpers n'est pas l'unique moyen d'viter la redondance. Dans le prochain chapitre, nous verrons unautre outil : les bibliothques.

    Partie 2 : Mise en place des cinq composants 37/102

    www.siteduzero.com

  • Les bibliothquesNous allons aborder ici un gros morceau de Codelgniter : les bibliothques.. Nous venons de voir les helpers, de petitesfonctions qui la plupart du temps sont dans le style passe-partout .Ce n'est pas du tout le cas des bibliothques. Celles-ci sont l pour nous faire gagner des semaines !

    Vous allez pouvoir forger votre propre opinion, car nous allons voir trois bibliothques : session, form_validation et database.Utiliser une bibliothqueCharger une bibliothque

    C'est la mme procdure que pour les helpers : avant d'utiliser, il faut charger.

    Voici comment faire pour charger une bibliothque :

    Code : PHP - Dans un contrleur

  • L'utilit de cette classe est quasi nulle, mais nous ferons avec. Voici le code dans le contrleur qui nous permettra d'avoir accs cette bibliothque.

    Code : PHP - contrleur

  • Code : PHP - contrleur

  • Code : PHP - Utilisation de la mthode user_userdata

  • Pseudo :

    Mot de passe :

    Cette vue fait apparatre deux champs texte et un bouton.

    Et voici le contrleur de test :

    Code : PHP

  • $this->form_validation->set_rules('pseudo', '"Nom d\'utilisateur"','trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean'$this->form_validation->set_rules('mdp', '"Mot de passe"','trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean'

    if($this->form_validation->run()) { // Le formulaire est valide $this->load->view('connexion_reussie'); } else { // Le formulaire est invalide ou vide $this->load->view('formulaire'); }}

    Dcomposons ensemble cette chane de caractres :trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean.

    trim : n'importe quelle fonction PHP native qui n'attend qu'un seul paramtre de type string peut tre indique ici. Ellesera applique au contenu du champ du formulaire. Ici, on applique la fonction trim (qui permet de retirer tous les espacesau dbut et la fin d'une chane).required : permet de dfinir le champ comme obligatoire. Si l'option required n'est pas dfinie, alors il sera possible devalider le formulaire sans que le champ ne soit rempli.min_length[entier] : permet de dfinir la longueur minimale du champ. Ici, j'estime que le pseudo ainsi que le mot depasse ne doivent pas avoir une longueur infrieure 5 caractres. Vous pouvez choisir le nombre que voulez, bienentendu.max_length[entier] : permet de dfinir la longueur maximale du champ. Cette option fonctionne de la mme manire quemin_length.alpha_dash : cette directive permet de n'accepter le champ que si celui-ci contient uniquement des caractresalphanumriques, des underscores ( _ ) et des tirets.encode_php_tags : convertit les balises PHP en entits HTML.xss_clean : supprime les risques de failles XSS.

    N'hsitez pas jeter un coup d'il aux autres directives. Certaines sont trs intressantes, comme matches qui permet de nevalider le formulaire que lorsque deux champs sont strictement identiques (pratique pour la confirmation du mot de passe lorsd'une inscription, par exemple). Notez que vous pouvez aussi dfinir vos propres directives.

    Maintenant, la validation du formulaire sera fonctionnelle. Cependant, bien que dj trs sympathique, cela ne constitue qu'unepartie de cette bibliothque. Nous allons maintenant dcouvrir d'autres fonctionnalits.

    Rcuprer vos valeursVos valeurs pourront tre rcupres via la bibliothque Input. L'utilisation de celle-ci est trs simple. Elle comporte quatremthodes majeures : post, get, cookie, server. Ces mthodes nous permettront de rcuprer les donnes entrantes.

    Code : PHP

  • Remettre les valeurs dans les champs et afficher les erreursCe serait bte de s'arrter l. En cas d'erreur, vous pouvez remettre dans les champs les valeurs envoyes et mme afficher leserreurs.Pour cela, nous utiliserons les mthodes set_value et form_error. La premire retourne la valeur et la seconde affiche l'erreur (sierreur il y a).

    Code : PHP - La vue

    Pseudo :

  • tu auras 1 rsultat. Merci beaucoup.

    Vous verrez que le fait d'utiliser des mthodes amliorera la lisibilit de votre code et vous permettra de simplifier tout leprocessus de construction de vos requtes. De plus, le passage un autre SGBD en sera simplifi.Nous aurons l'occasion d'approfondir un peu l'utilisation de la bibliothque dans le chapitre suivant.

    Lorsque nous aurons des requtes beaucoup plus compliques, il sera peut-tre judicieux de revenir aux requtes sous forme dechanes de caractres. Voici un exemple :

    Code : PHP - Avec la mthode query

  • La premire ligne stocke dans une variable la valeur de retour de la fonction get_instance. Cette fonction vous permetd'utiliser vos bibliothques l'intrieur de vos fonctions et de vos classes . En effet, nous savons que pour appeler les mthodesdes bibliothques, vous devez faire quelque chose comme cela :

    Code : PHP

  • Le modleVous avez vu les contrleurs et les vues. Vous avez vu les helpers et les bibliothques. Il ne vous manque plus que les modles !

    Dans cette partie, nous utiliserons le pattern Active Record de la classe database pour effectuer nos requtes.

    Rappel : les modles servent faire les requtes dans la base de donnes et retourner le rsultat sous forme brute(sans HTML).

    Anatomie d'un modleTout au long de ce chapitre, nous allons crer un modle pour la gestion d'un systme de news.

    Cration du modleCrez un fichier news_model.php dans votre dossier ./application/models/.Voici ce que vous allez y placer. Il s'agit d'un modle basique.

    Code : PHP - ./application/models/news_model.php

  • Vous avez aussi la possibilit de charger le modle dans le constructeur d'un contrleur pour y avoir accs dans toutesses mthodes.

    Maintenant que nous avons charg le modle, nous allons rcuprer les donnes de la mthode get_info.

    Code : PHP - Un contrleur

  • Vous pourrez penser que c'est un dtail mais bien nommer ses modles permet d'amliorer la lisibilit de votre code. Prenez debonnes habitudes ds le dbut.

    Nous avons fait le tour de ce qui constitue le modle. Une fois qu'il est inclus, nous pouvons avoir accs ses mthodes de lamme faon qu'une bibliothque. Cependant, nous n'avons pas encore eu l'occasion de raliser de vraies requtes. La prochainepartie vous permettra de faire vos premiers pas avec la bibliothque database car nous construirons un modle pour un systmede news.

    Le modle de gestion des newsNotre prcdent modle n'en tait pas vraiment un car nous ne lui avons pas fait effectuer de requtes. Nous nous sommescontents de lui faire retourner un tableau pour faciliter l'criture de la mthode. Maintenant, nous allons crer le modle pour lagestion d'un systme de news.

    Voici la table :

    Le code SQL : Code : SQL

    CREATE TABLE `news` ( `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `auteur` VARCHAR(30) NOT NULL, `titre` VARCHAR(100) NOT NULL, `contenu` TEXT NOT NULL, `date_ajout` DATETIME NOT NULL, `date_modif` DATETIME NOT NULL)

    ENGINE = MyISAM DEFAULT CHARSET = utf8;

    Et le prototype du modle :

    Code : PHP - application/models/news_models.php

  • */ public function editer_news() { } /*** Supprime une news*/ public function supprimer_news() { } /*** Retourne le nombre de news*/ public function count() { } /*** Retourne une liste de news*/ public function liste_news() { }}

    /* End of file news_model.php *//* Location: ./application/models/news_model.php */

    Le fait de stocker le nom de la table dans un attribut permet de rendre votre modle plus flexible.

    Le point sur Active Record

    CodeIgniter vous propose deux manires de lancer des requtes la base de donnes : en l'crivant en langage SQL ou enutilisant Active Record.

    Active Record est un patron sur lequel on peut s'appuyer pour faire nos requtes. Il s'utilise en trois tapes :cration de la requte avec les mthodes de la classe Database ;excution de la requte ;manipulation des donnes que la base de donnes a renvoyes.

    Dans la suite de ce tutoriel, j'utiliserai autant que possible Active Record. Maintenant, nous allons implmenter chaque mthodedu modle une par une.

    Mthode ajouter_newsCette mthode permet d'ajouter une news. Ainsi, les champs id, date_ajout et date_modif devront tre grs par lamthode. Celle-ci a besoin de 3 paramtres : l'auteur, le titre et le contenu.

    Code : PHP - Implmentation de la mthode ajouter_news

    Partie 2 : Mise en place des cinq composants 51/102

    www.siteduzero.com

  • Code : PHP - Un contrleur

  • // Ces donnes seront chappes if($titre != null) { $this->db->set('titre', $titre); } if($contenu != null) { $this->db->set('contenu', $contenu); } // Ces donnes ne seront pas chappes $this->db->set('date_modif', 'NOW()', false); // La condition $this->db->where('id', (int) $id); return $this->db->update($this->table);}

    Dans un premier temps, nous mettons jour les deux champs que nous souhaitons modifier. Si l'un des deux a pour valeur null,alors il sera ignor.Puis nous compltons la date et l'heure de la mise jour.Ensuite, il faut lui dire quelles sont les entres que nous souhaitons modifier. Ici, nous avons choisi d'autoriser la modificationuniquement par le champ id. Cela se fait par la mthode where. Si nous ne lui disons pas quels sont les champs que noussouhaitons modifier, alors nous modifierons toutes les entres que possde la table.Puis en dernier, nous lanons la mthode update pour excuter la requte en lui donnant en paramtre le nom de la table.

    Vous pouvez rendre cette mthode plus flexible en autorisant la modification de la news par un autre champ que id. En effet, lamthode where peut aussi recevoir un tableau associatif du type : nom_du_champ => valeur.Ainsi, vous pouvez crer une condition : si $id est un tableau, alors ce tableau sera donn la mthode where sans spcifierde champ .

    Nous l'implmenterons comme cela : Code : PHP

  • Code : PHP - Mthode supprimer_news

  • Cela quivaut retourner le nombre total d'entres.Dans le deuxime cas, le tableau que nous donnons en paramtre permet d'affiner la requte et de ne retourner que le nombred'entres o le champ auteur vaut Bob .

    Mthode liste_newsLes requtes permettant de slectionner un ensemble d'entres fonctionnent de la mme manire que les requtes sous forme dechanes de caractres.

    Il y a une mthode select pour rduire la taille des donnes rcupres. Sa valeur par dfaut est * qui permet dercuprer tous les champs.Il y a une mthode from qui permet de spcifier la table souhaite.Il y a une mthode join pour faire des jointures.Il y a des mthodes conditionnelles. Nous avons vu where, mais il y en a d'autres (or_where, like, or_like, etc.).Il existe aussi d'autres mthodes telles que limit ou order_by, qui ont les mmes utilits que dans le langage SQL.

    Il en existe beaucoup d'autres mais vous avez remarqu que les noms des mthodes sont les mmes (ou presque) que les mots-cls du langage SQL.

    Intressons-nous prsent l'implmentation de la mthode : Code : PHP - Mthode liste_news

  • * supprimer_news($id)* count($where = array())* liste_news($nb = 10, $debut = 0)*/

    class News_model extends CI_Model{ protected $table = 'news';

    /*** Ajoute une news.** @param string $auteur L'auteur de la news* @param string $titre Le titre de la news* @param string $contenu Le contenu de la news* @return bool Le rsultat de la requte*/ public function ajouter_news($auteur, $titre, $contenu) { return $this->db->set('auteur', $auteur) ->set('titre', $titre) ->set('contenu', $contenu) ->set('date_ajout', 'NOW()', false) ->set('date_modif', 'NOW()', false) ->insert($this->table); } /*** dite une news dj existante.* * @param integer $id L'id de la news modifier* @param string $titre Le titre de la news* @param string $contenu Le contenu de la news* @return bool Le rsultat de la requte*/ public function editer_news($id, $titre = null, $contenu = null) { // Il n'y a rien diter if($titre == null AND $contenu == null) { return false; } // Ces donnes seront chappes if($titre != null) { $this->db->set('titre', $titre); } if($contenu != null) { $this->db->set('contenu', $contenu); } return $this->db->set('date_modif', 'NOW()', false) ->where('id', (int) $id) ->update($this->table); } /*** Supprime une news.* * @param integer $id L'id de la news modifier* @return bool Le rsultat de la requte*/ public function supprimer_news($id) { return $this->db->where('id', (int) $id) ->delete($this->table); }

    Partie 2 : Mise en place des cinq composants 57/102

    www.siteduzero.com

  • /*** Retourne le nombre de news.* * @param array $where Tableau associatif permettant de dfinir desconditions* @return integer Le nombre de news satisfaisant la condition*/ public function count($where = array()) { return (int) $this->db->where($where) ->count_all_results($this->table); } /*** Retourne une liste de $nb dernire news.* * @param integer $nb Le nombre de news* @param integer $debut Nombre de news sauter* @return objet La liste de news*/ public function liste_news($nb = 10, $debut = 0) { return $this->db->select('*') ->from($this->table) ->limit($nb, $debut) ->order_by('id', 'desc') ->get() ->result(); }}

    /* End of file news_model.php *//* Location: ./application/models/news_model.php */

    La ralisation de ce modle vous permettra de comprendre bien plus facilement la documentation sur la bibliothque database, etplus particulirement le pattern Active Record.

    Dsormais, vous en savez suffisamment sur CodeIgniter pour construire un site web. Vous ne connaissez pas tout de ceframework. Je ne vais pas vous lcher comme cela, bien entendu. Mais si vous avez bien compris tout ce que nous avons vudans ces deux parties, vous tes en mesure de raliser un bon nombre de sites.

    Partie 2 : Mise en place des cinq composants 58/102

    www.siteduzero.com

  • [TP] Un livre d'orNous en avons termin avec la dcouverte de Codelgniter : nous allons pouvoir passer aux choses srieuses. Mais ne vousinquitez pas, il n'y aura rien de vraiment compliqu, nous allons juste nous servir de tout ce que nous avons appris jusqu'ici

    En route !

    La lecture des cinq premiers chapitres de cette partie est obligatoire pour bien comprendre ce que nous allons raliser.

    Description du livre d'orPetit rappel

    Un livre d'or est un endroit o les visiteurs inscrivent des remarques sur ce qu'ils pensent de votre site.

    Il faudra donc une page permettant d'afficher les commentaires (avec un systme de pagination), et une autre o l'on aura unformulaire qui permettra aux visiteurs d'crire un nouveau commentaire. Un commentaire est compos d'un pseudo, d'un messageet d'une date.

    Descriptif des pages

    Affichage des commentairesComme je l'ai dit ci-dessus, cette page sert afficher les derniers commentaires des visiteurs. J'ai fait une petite capture d'cran dece que l'on obtient une fois ce TP termin.

    Comme vous le voyez, on a bien les commentaires avec une pagination et un lien vers la page d'ajout d'un commentaire.

    FormulaireLa page de formulaire est plutt simple. Il s'agit de demander au visiteur son pseudo et le message qu'il veut crire dans le livred'or. Une fois cela fait, on enregistre le message et on affiche une page de confirmation.

    Avant de commencerComme vous le voyez, j'ai fait aussi simple que possible. Pas de captcha, ni rien de particulirement difficile que vous ne savezpas faire. Normalement, vous avez tous dj ralis un livre d'or ou quelque chose d'quivalent.

    Cette partie du tutoriel est uniquement faite pour que vous sachiez ce que nous allons faire. Dans la partie suivante, je vais vousdonner des conseils pour vous aider. Vous n'tes donc pas obligs de la lire. Vous pouvez vous lancer ds maintenant.

    Coup de pouceComme convenu, cette partie est facultative.

    Schma de la tablePour vous faire conomiser quelques prcieuses minutes, je vous ai fait une copie de la requte qui m'a permis de crer ma table.La voici.

    Code : SQL - Cration de la table livreor_commentaires

    Partie 2 : Mise en place des cinq composants 59/102

    www.siteduzero.com

  • CREATE TABLE IF NOT EXISTS `livreor_commentaires`(

    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pseudo` varchar(52) NOT NULL, `message` text NOT NULL, `date` DATETIME NOT NULL,

    PRIMARY KEY (`id`))

    ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

    Rien d'exceptionnel ici. On trouve un champ pseudo , un champ contenu et un champ date . En image, cela donne ceci :

    Sauf que cette table est vide Pour tester, il vaut mieux la remplir un petit peu. Je vous ai donc concoct un petit ensembled'entres copier-coller dans PHPMyAdmin. Une fois les tests termins, il vous suffira de vider votre table pour la remettre zro.

    Secret (cliquez pour afficher)Code : SQL

    INSERT INTO `livreor_commentaires` (`id`, `pseudo`, `message`,`date`) VALUES(1, 'Chuck Norris', 'bienvenue !', '2010-09-13 21:04:00'),(2, 'Patrick', 'J''aime !', '2010-09-05 21:04:12'),(3, 'Patrick', 'Encore une fois.', '2010-09-02 21:04:45'),(4, 'Mathieu', 'Ceci est un commentaire.', '2010-09-04 21:05:01'),(5, 'Francois', 'Il etait une fois....', '2010-09-05 21:05:23'),(6, 'M. Deres', 'Bienvenue a vous tous !', '2010-09-01 21:05:51'),(7, 'H. Reges', 'Salut, super ce site !', '2010-09-02 21:06:09'),(8, 'L. Dergs', 'Il etait une fois...', '2010-09-05 21:06:33'),(9, 'L. Broue', 'Jamais deux sans toi !', '2010-09-12 21:06:59'),(10, 'S. Eruit', 'Salut, j''aime bien ce site !', '2010-09-2121:08:16'),(11, 'M. Ourit', 'Debut de site sympathique.', '2010-09-1321:08:13'),(12, 'Patrick', 'Encore une fois.', '2010-09-02 21:04:45'),(13, 'Mathieu', 'Ceci est un commentaire.', '2010-09-0421:05:01'),(14, 'Francois', 'Il etait une fois....', '2010-09-05 21:05:23'),(15, 'M. Deres', 'Bienvenue a vous tous !', '2010-09-0121:05:51'),(16, 'H. Reges', 'Salut, super ce site !', '2010-09-02 21:06:09'),(17, 'L. Dergs', 'Il etait une fois...', '2010-09-05 21:06:33'),(18, 'L. Broue', 'Jamais deux sans toi !', '2010-09-12 21:06:59'),(19, 'S. Eruit', 'Salut, j''aime bien ce site !', '2010-09-2121:08:31'),(20, 'M. Ourit', 'Debut de site sympathique.', '2010-09-1321:08:13'),(21, 'Patrick', 'Encore une fois.', '2010-09-02 21:04:45'),(22, 'Mathieu', 'Ceci est un commentaire.', '2010-09-0421:05:01'),(23, 'Francois', 'Il etait une fois....', '2010-09-05 21:05:23'),(24, 'M. Deres', 'Bienvenue a vous tous !', '2010-09-01

    Partie 2 : Mise en place des cinq composants 60/102

    www.siteduzero.com

  • 21:05:51'),(25, 'H. Reges', 'Salut, super ce site !', '2010-09-02 21:06:09'),(26, 'L. Dergs', 'Il etait une fois...', '2010-09-05 21:06:33'),(27, 'L. Broue', 'Jamais deux sans toi !', '2010-09-12 21:06:59'),(28, 'S. Eruit', 'Salut, j''aime bien ce site !', '2010-09-2121:08:35'),(29, 'M. Ourit', 'Debut de site sympathique.', '2010-09-1321:08:13'),(30, 'Patrick', 'Encore une fois.', '2010-09-02 21:04:45'),(31, 'Mathieu', 'Ceci est un commentaire.', '2010-09-0421:05:01'),(32, 'Francois', 'Il etait une fois....', '2010-09-05 21:05:23'),(33, 'M. Deres', 'Bienvenue a vous tous !', '2010-09-0121:05:51'),(34, 'H. Reges', 'Salut, super ce site !', '2010-09-02 21:06:09'),(35, 'L. Derg