Developpez.com - PHP
X

Choisissez d'abord la catégorieensuite la rubrique :


Présentation du framework Jelix

Date de publication : 31/12/2009

Par Rija Randriano (Site perso de Randriano)
 

Le langage avec quoi je programme jusqu'à maintenant c'est essentiellement du C++. Mon monde était toujours la création d'applications lourdes. Pour me faire un peu d'exercice en applications légères (Web), je me fais un peu de PHP et j'ai constaté qu'écrire avec du PHP brut deviendrait un vrai bazar version après version. Je passe donc à la recherche de framework : Zend démeure le plus connu de la communauté PHP.

Mais j'ai découvert Jelix un framework open source créé par un Français : Laurent Jouanneau. Assez récent, il n'est pas encore aussi documenté que ses ainés.




I. Introduction


I-A. Préface


I-B. Architecture MVC

Comme la plupart des frameworks PHP, JELIX utilise aussi l'architecture MVC (Modèle - Vue - Contrôleur).
<?php 
	mysql_connect('localhost','root','');
	mysql_select_db('test_01');
	
	$res = mysql_query("SELECT prenom_etudiant, nom_etudiant, ROUND(T_Moy.somme/T_Moy.somme_coeff, 2) AS moyenne
		FROM etudiant LEFT JOIN
		(SELECT idnote_etudiant, SUM( valeur_note * coeff_module ) AS somme, SUM(coeff_module) AS somme_coeff
		FROM module
		INNER JOIN note ON ( module.id_module = note.idnote_module )
		GROUP BY note.idnote_etudiant) AS T_Moy 
		ON (etudiant.id_etudiant = T_Moy.idnote_etudiant)
		ORDER BY moyenne DESC");
		
	echo '<table>';
	while($row = mysql_fetch_row($res))
	{
		echo '<tr><td>'.$row[0].'</td><td>'.$row[1].'</td><td>'.$row[2].'</td></tr>';
	}
	echo '</table>';
?>
Au long du cycle de vie de l'application, ce type de code devient impossible à maintenir car le client continue de demander des modifications, qui sont codées à plusieurs endroits du code principal.

Le modèle objet de PHP5 allié à la puissance interne de PHP a permis l'apparition de différents frameworks PHP. Le PHP a maintenant atteint la capacité du Java, .NET ou autres en terme de conception logicielle.


I-C. Principe de fonctionnement

  1. Jelix reçoit une requête HTTP. Il instancie un objet jRequest qui contient les données de la requête, et instancie le contrôleur qui correspond à l'action.
  2. La méthode du contrôleur correspondante à l'action est executée. La méthode récupère les paramètres de requête pour déterminer les traitements à suivre
  3. Le contrôleur exécute les traitements métiers et récupère éventuellement des résultats qui seront utilisés pour l'affichage
  4. Le contrôleur instancie un objet de type jResponse auquel il assignera les données à afficher, initialisera les templates etc.
  5. Jelix récupère cet objet jResponse, invoque la génération du document en sortie et envoie ce dernier au navigateur.
Source : jelix.org


II. JELIX proprement dit


II-A. Organisation du répertoires

Jelix utilise une structure particulière de répertoires.

Jelix est fourni sous forme d’une archive tar.gz ou zip. Cette archive contient un répertoire jelixprojects/lib qui contient tous les fichiers du framework et les bibliothèques dépendantes, ainsi qu’un répertoire jelixprojects/temp.


Création d'une application

Il faut d'abord créer ce qu'est une application (le site web ou l'application web proprement dit).

Jelix est fourni avec un script, jelix.php, qui facilite la création et la modification des différents fichiers d’une application basée sur Jelix! Il faut l’invoquer avec la version ligne de commande de PHP et indiquer en paramètre un nom de commande Jelix. Pour la création d'une application, on a la commande : createapp

ex : php ..\www\jelixprojects\lib\jelix-scripts\jelix.php --randriano.org createapp -nodefaultmodule

Ici, randriano.org est le nom de l'application qui va être créée.

La structure particulière de répertoires est enfin créée :
randriano.org/				répertoire de l’application
	modules/				modules de l’application
	plugins/				plugins de l’application
	responses/				les réponses personnalisées
	var/					répertoire qui contient tout les fichiers créés ou susceptibles d’être modifiés par Jelix, pendant l’exécution
		config/				fichiers de configuration de l’application
		log/				fichiers journaux de l’application et de Jelix
	www/					racine du site de l’application (document root)
					

II-B. Création d'un module

Bien qu'utilisant le design pattern MVC, les contrôleurs et fonctionnalités d'une application sont regroupés en modules.

  • Des contrôleurs
  • Des classes métiers
  • Des templates
  • Des fichiers daos
  • Des formulaires
  • Des fichiers de langues
Un module est un répertoire dans lequel il y a une arborescence précise. Pour en créer, il suffit d'utiliser le script jelix.php et la commande createmodule :

ex : php ..\www\jelixprojects\lib\jelix-scripts\jelix.php --randriano.org createmodule nouveautes

nouveautes est le module à créer!


Contrôleurs

C'est un des éléments importants du MVC. Les contrôleurs sont les objets qui vont effectuer les actions correspondantes à chacune des urls d'une application.

A la création d'un module, un contrôleur par défaut nommé "default" est créé. Sous Jelix, un contrôleur est une classe qui hérite de la classe jController
class defaultCtrl extends jController {
	function index () {
		$rep = $this->getResponse('html');

		return $rep;
	}
}
index() est ici l'action par défaut qui est créée pour le contrôleur.


II-B-2. Les objets jResponse

On a jController pour les contrôleurs, jResponse représente la vue dans le modèle MVC de Jelix. Toute demande d'affichage passe par cet objet.

L'objet jResponseHtml s'occupe de générer une réponse en HTML (donc une page en HTML). Il génère automatiquement la partie <head> du HTML, à partir de certaines de ses propriétés. On indique l'alias "html" à la méthode getResponse(). On récupère la réponse comme suit:
$rep = $this->getResponse('html');
Un objet jResponse implémente un certain nombre de méthodes comme addHttpHeader(), setHttpStatus(), etc pour manipuler le contenu HTML. Le source HTML d'une page est pour Jelix découpé en 2 parties : la partie <head>, et la partie <body> mais jResponseHtml ne s'occupe donc comme dit auparavant que de <head>

L'objet jResponse est hérité par plusieurs objets dont jResponseHtml, il y a aussi les réponses particulières comme la redirection. Mais il permet aussi de générer une interface utilisateur en XUL. Un peu de définition: XUL est un langage de description d’interfaces graphiques fondé sur XML créé dans le cadre du projet Mozilla. L'objet jResponseXul permet de générer une fenêtre XUL (<window>). Il y a aussi jResponseXulDialog pour les boîtes de dialogue (<dialog>), jResponseXulOverlay pour les overlays XUL (<overlay>), et jResponseXulPage pour les pages XUL incluses via une balise <iframe> dans une fenêtre XUL.


II-B-3. Les templates

jResponseHtml pour la partie <head> , la génération du contenu de la partie <body> est de votre ressort, avec l'aide éventuellement des templates.

Le contenu du template sera le contenu de la balise <body>. C’est pourquoi vous n’avez pas à mettre les balises standard <html>, <head>, etc... Juste le contenu de la page.

Pour utiliser un template, il suffit d'indiquer le sélecteur de template dans la propriété bodyTpl.
function index () {
	$rep = $this->getResponse('html');
	$rep->title = 'Dernières actualités';
	$rep->bodyTpl = 'listenews';
	return $rep;
}
listnews correspond à un fichier listnews.tpl dans le répertoire templates du module.


II-C. Jelix et les bases de données


III. CONCLUSION

Ceci n'est pas un tutoriel mais seulement une présentation rapide de ce puissant framework.



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique PHP