vendredi 20 septembre 2013

Les vues

Exercice 1 : notre première vue

1) En utilisant l'annexe 1, créez la vue blog_vue

2) Affichez la vue blog_vue dans la méthode afficherbillet du contrôleur blog


Exercice 2 : transmettre des données dynamiques à une vue

1) A l'aide d'un tableau, transmettez les données de l'annexe 2 à votre vue blog_vue via la méthode afficherbillet

2) Même consigne que pour le 1) sauf que cette fois ci nous utiliserons un objet au lieu d'un tableau


Exercice 3 : notre vue comme donnée

1) Au lieu d'afficher la vue placez la dans une variable.


Annexe 1 :

<html>
 <head>
  <title>Mon blog</title>
 </head>
 <body>
  <h1>Bienvenue sur mon blog!</h1>
 </body>
</html>

Annexe 2 :

'titre' => 'Mon titre', 'message' => 'Mon message'


Correction de l'exercice 1 :

On crée un nouveau fichier et on y colle le code de l'annexe 1 :

Sur CodeIgniter les vues sont a enregistrer dans le dossier application/views/. Le nom de cette vue est determinée par le nom que l'on donne au fichier. Ainsi pour appeler notre vue blog_vue nous devons enregistrer notre vue sous le nom blog_vue.php

Retournons maintenant à notre contrôleur blog et modifions la méthode afficherbillet pour appeler notre vue blog_vue

function afficherbillet () {

 $this->load->view('blog_vue');

}

Il ne nous reste qu'à charger notre méthode via notre navigateur

Il est interessant de noter que dans CodeIgniter une vue n'appartient pas obligatoire à une et une seule méthode, plusieurs méthodes peuvent avoir une même vue.

Nous pouvons également charger plusieurs vues au sein de notre méthode, les vues seront affichées dans l'ordre d'appel les unes après les autres.

A titre d'exemple ce code :

function afficherbillet () {

 $this->load->view('blog_vue');
 $this->load->view('blog_vue');

}

nous retournera :


Correction de l'exercice 2 :

Pour envoyer des données à une vue c'est très simple il suffit de mettre un tableau ou un objet en deuxième paramètre :

$data = array(
               'titre' => 'Mon titre',
               'message' => 'Mon message'
          );

$this->load->view('blog_vue', $data);

Puis, pour récupérer ces données dans notre vue :

<html>
   <head>
      <title><?php echo $titre; ?></title>
   </head>
   <body>
      <h1><?php echo $message; ?></h1>
   </body>
</html>

On affiche ça dans notre navigateur :

A la place d'un tableau nous pouvons utiliser un objet :

function afficherbillet () {

 $data = new stdClass();
 $data->titre = 'Mon titre';
 $data->message = 'Mon message';

 $this->load->view('blog_vue', $data);

}

Ce qui nous affichera exactement le même résultat :


Correction de l'exercice 3 :

Il se peut que dans certains cas, au lieu d'afficher la vue, vous devez la mettre dans une variable.

Il nous suffit d'ajouter un 3ème paramètre TRUE et d'assigner une variable

function afficherbillet () {

 $data = new stdClass();
 $data->titre = 'Mon titre';
 $data->message = 'Mon message';

 $maVue = $this->load->view('blog_vue', $data, TRUE);
 echo $maVue;

 // SI AUCUNE DONNEES
 // $maVue = $this->load->view('blog_vue', '', TRUE);

}

Les contrôleurs

Exercice 1 : notre premier contrôleur

1) Créez le contrôleur blog

2) Faites en sorte que l'appel de ce contrôleur affiche "Hello World!"


Exercice 2 : notre première méthode

1) Dans le contrôleur blog, créez la méthode afficherbillet qui affichera le texte Méthode afficherbillet()


Exercice 3 : notre première fonction

1) Dans le contrôleur blog, créez la fonction miseenformebillet(). Cette fonction retournera le texte billet mis en forme

2) Dans la méthode afficherbillet précédemment créée, affichez la fonction miseenformebillet().


Exercice 4 : les paramètres

1) Envoyez les paramètres segmentaires ref et titre à la méthode afficherbillet du contrôleur blog

2) Envoyez les paramètres GET ref et titre à la méthode afficherbillet du contrôleur blog

3) Envoyez les paramètres POST ref et titre à la méthode afficherbillet du contrôleur blog


Exercice 5 : le constructeur

1) Utilisez le constructeur du contrôleur Blog pour définir la variable $this->titrePage = "Titre de ma page"

2) Affichez cette variable dans la méthode afficherbillet


Exercice 6 : contrôleur par default

1) Utilisez le contrôleur blog comme contrôleur par default


Correction de l'exercice 1

Qu'est-ce qu'un Contrôleur ?

Un contrôleur est simplement une classe nommée de manière à être associée logiquement avec une URI.

Par exemple :

example.com/index.php/blog/

Commençons par créer notre contrôleur blog (blog.php) dans le répertoire application/controllers/ et y placer le code suivant :

<?php

class Blog extends CI_Controller {

 function index() {

  echo 'Hello World!';

 }
}

On test en appelant http://siteci.dev/index.php/blog/ avec notre navigateur :

On obtient bien le résultat souhaité

On peut là encore comparer CodeIgniter avec d'autre framework tel que Zend qui demandent obligatoirement une vue pour fonctionner.


Correction de l'exercice 2

Pour ajouter la méthode afficherbillet à notre controleur nous devons juste ajouter la fonction suivante :

function afficherbillet() {

 echo 'Méthode afficherbillet()';

}

Et on test en appelant http://siteci.dev/index.php/blog/afficherbillet/ dans notre navigateur


Correction de l'exercice 3

Comme précédemment, on ajoute la fonction miseenformebillet à notre contrôleur blog.

function miseenformebillet() {

 return 'billet mis en forme';

}

Seulement le problème est que si on appele l'URL http://siteci.dev/index.php/blog/miseenformebillet/ on obtient une réponse de la part du serveur.

Pour indiquer que cette fonction ne sera qu'une fonction de travail il nous suffit d'ajouter private en préfixe de la fonction.

CodeIgniter nous propose également de rajouter un _ devant le nom de la fonction pour la rendre privée.

Maintenant lorsque nous essayerons d'accèder à cette fonction via une URL nous obtiendrons le résultat suivant :

Nous allons maintenant appeler la fonction miseenformebillet dans notre méthode afficherbillet :

function afficherbillet() {

 echo $this->miseenformebillet();

}

Testons en appelant http://siteci.dev/index.php/blog/afficherbillet/


Correction de l'exercice 4

Nous allons maintenant envoyer des paramètres à notre méthode afficherbiller

Modifions notre méthode pour :

function afficherbillet ($pRef, $pTitre) {

 echo 'Réf: '.$pRef.', Titre : '.$pTitre;

}

Entrons l'URL http://siteci.dev/index.php/blog/afficherbillet/33/titre-billet/ et nous devrions avoir le résultat suivant :

Remodifions notre fonction pour récupérer maintenant des paramètres GET

function afficherbillet () {

 echo 'Ref: '.$this->input->get('ref').', Titre: '.$this->input->get('titre');

}

Pour les POST le fonctionnement est similaire que pour les GET

function afficherbillet () {

 echo 'Ref: '.$this->input->post('ref').', Titre: '.$this->input->post('titre');

}

CodeIgniter met également à disposition une fonction universelle qui nous permet de récupérer des GET ou des POST. Si vous lui envoyez un GET et POST portant le même identifiant, le POST sera prioritaire sur le GET.

$this->input->get_post('ref');

Pour se protèger des failles XSS, CodeIgniter nous propose de mettre TRUE en deuxième paramètre :

// NON PROTEGE CONTRE LES XSS
$this->input->post('ref');

// PROTEGE CONTRE LES XSS
$this->input->post('ref', TRUE);

Correction de l'exercice 5

Sur CodeIgniter pour avoir un constructeur à notre contrôleur nous devons utiliser la fonction suivante

function __construct() {

 parent::__construct();

 $this->titrePage = "Titre de ma page";

}

Puis dans notre fonction afficherbillet on a juste à appeler notre variable titrePage

function afficherbillet () {

 echo $this->titrePage;

} 

Il ne nous reste plus qu'a tester en appelant notre méthode :

Notre variable titrePage sera maintenant accesible dans toutes les fonctions du contrôleur.


Correction de l'exercice 6

Actuelement lorsque l'on affiche notre site http://siteci.dev on arrive sur la page de bienvenue fournie par l'éditeur.

Nous allons changer ça pour mettre le contrôleur blog que nous avons créé dans les exercices précédents.

On ouvre le fichier de configuration application/config/routes.php et on change

$route['default_controller'] = "welcome";

pour

$route['default_controller'] = "blog";

On enregistre et on affiche notre site

La méthode index de notre contrôleur blog est maintenant affichée par default

jeudi 19 septembre 2013

Télécharger et installer CodeIgniter

Pour les besoins de ce chapitre nous utiliserons un serveur sous Debian 6 Squeeze ainsi qu'une version installé de PHP 5.3.10. (Rendez-vous sur Exercices corrigés pour Debian 6 Squeeze pour plus d'infos)

Exercice 1 : Télécharger CodeIgniter

1) Téléchargez la dernière version stable de CodeIgniter depuis le site officiel (http://ellislab.com/codeigniter) dans le dossier /www/htdocs situé à la racine de votre serveur.

2) En utilisant l'utilitaire unzip, décompressez l'archive téléchargée dans le dossier /www/htdocs/siteci/ que vous créerez.


Exercice 2 : Création d'un nom de domaine local

1) Créez le nom de domaine local siteci.dev que vous pointerez sur le dossier /www/htdocs/siteci/


Correction de l'exercice 1

On se place dans notre dossier /www/htdocs (si le ou les dossiers n'existent pas on les créait)

$ cd /www/htdocs

Une fois dans notre dossier on télécharge l'archive depuis le site officiel de Ellislab. On commence par récupérer l'URL de notre fichier

On le télécharge sur notre serveur via un wget

$ wget http://ellislab.com/codeigniter/download

On lance le téléchargement

Le fichier a été sauvegardé sous le nom download, pour des raisons pratiques nous allons le renommer en CodeIgniter.zip

$ mv download CodeIgniter.zip

Et on vérifie que le renommage a bien eu lieu :

$ ls

Pour désarchiver un fichier zip sur Debian nous devons avoir le paquet unzip d'installé sur notre serveur. Pour savoir si unzip est déjà installé on lance la commande suivante :

$ apt-cache policy unzip

Si la version est bien installé et à jour, vous devriez avoir la réponse suivante :

Si unzip n'est pas encore installé sur votre serveur, on l'installe en utilisant apt-get

$ apt-get install unzip

Une fois l'utilitaire unzip installé, passons maintenant au désarchivage de notre archive :

$ apt-get unzip CodeIgniter.zip -d /www/htdocs/siteci/

Pour vérifier que tout s'est bien déroulé on affiche notre dossier :

Tout est là, on peut supprimer notre archive CodeIgniter.zip

$ rm CodeIgniter.zip

Correction de l'exercice 2

On va rediriger le nom de domaine zendsite.com vers notre serveur, bien entendu vous ne deviendrez propriétaire de ce nom de domaine, seul votre ordinateur redirigera vers l'IP de votre serveur.

Si votre navigateur web se trouve sous Windows, vous devez ouvrir le fichier hosts qui se trouve dans C:\Windows\System32\drivers\etc\host avec votre éditeur texte habituel.

Si votre navigateur web se trouve sous Mac ou Linux, vous devez ouvrir le fichier hosts qui se trouve dans /etc/host avec votre éditeur texte habituel.

Et on ajoute les lignes suivantes :

192.168.1.13 siteci.dev
192.168.1.13 www.siteci.dev

En prenant soin de changer l'IP pour celle de votre serveur.

Maintenant nous devons signaler au serveur que les requetes arrivant depuis le domaine siteci.dev devront être redirigées vers le dossier /www/htdocs/siteci/.

Pour cela on créé un virtualhost :

$ nano /etc/apache2/sites-available/siteci.dev

Et on y colle notre virtualhost :

<VirtualHost *:80>
    ServerAdmin postmaster@siteci.dev
    ServerName siteci.dev
    ServerAlias www.siteci.dev
    DocumentRoot /www/htdocs/siteci/
    <Directory /www/htdocs/siteci/>
        Options -Indexes FollowSymLinks
        AllowOverride All
    </Directory>
    ErrorLog /www/htdocs/logs/siteci_error.log
    LogLevel warn
    CustomLog /www/htdocs/logs/siteci_access.log combined
    ServerSignature Off
</VirtualHost>

On enregistre et on quitte

Si le dossier log n'existe pas on le créé :

$ mkdir /www/htdocs/logs/

On rend le domaine créé disponible :

$ ln -s /etc/apache2/sites-available/siteci.dev /etc/apache2/sites-enabled/siteci.dev

On redémarre apache :

$ /etc/init.d/apache2 restart

Il ne nous reste plus qu'a tester notre installation en entrant http://siteci.dev dans notre navigateur

Tout est ok ! Si vous avez déjà utilisé un framework tel que Zend vous pouvez noter que chaque projet possédera cette fois ci ses propres librairies du framework, ainsi si votre serveur heberge plusieurs sites sous CodeIgniter la librairie sera dupliquée.

mercredi 18 septembre 2013

Prérequis

Un framework c'est quoi ?

Un framework se greffe sur un langage. On peut considérer le langage comme étant de bas niveau et le framework comme étant de haut niveau, car les ressources offertes par le framework sont plus proches du raisonnement humain (métier) que celles proposées par le langage.

Concrètement, cela signifie que pour développer une même fonctionnalité, on aura besoin de moins de code avec un framework que sans.

Il est surtout recommandé dans le développement en équipe en instaurant des règles de programmation cohérentes à l'aide d'une méthodologie et d'une organisation de travail qui permet de garder le code de l'application organisé est compréhensible par n'importe quel membre de l'équipe de développement.

CodeIgniter

CodeIgniter est un framework PHP puissant avec un très faible encombrement, construit pour les codeurs PHP qui ont besoin d’une boîte à outils simple et élégante pour créer des applications web complet. Si vous êtes un développeur qui vit dans le monde réel de l’hébergement mutualisé et des comptes clients avec des délais, et si vous êtes fatigué de cadres de grandes lourdement et de manière approfondie sans-papiers.