Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes |
tutoriels:principal:creation-action [2008/01/08 11:02] – laurent | tutoriels:principal:creation-action [2008/05/12 13:34] – laurent |
---|
====== Création d'une action ====== | |
| |
| |
| |
===== Un peu de théorie ===== | ===== Un peu de théorie ===== |
| |
Une action est un élément fondamental du framework. Tout affichage, tout traitement de formulaire, tout appel de service web est une action. | Une action est un élément fondamental du framework. Tout affichage, tout traitement de formulaire, tout appel de service web est une action. |
| |
Une action est appelée dans le cadre d'une requête d'un type précis et génère une réponse spécifique, dans un format spécifique, qui peut être lié au type de requête en question. | Une action est appelée dans le cadre d'une requête d'un type précis et génère une réponse spécifique dans un format spécifique, qui peut être lié au type de requête en question. |
| |
Il existe plusieurs types de requêtes, notamment le type que l'on nomme dans Jelix, "classic", pour lequel une action peut fournir une réponse dans un format quelconque : HTML, XML, etc. C'est pour ce type de requête que vous définirez le plus souvent des actions. En général, ce type de requête fournit ses paramètres dans l'url ou dans le corps de la requête HTTP (méthode POST). | Il existe plusieurs types de requêtes, notamment le type que l'on nomme dans Jelix, "classic", pour lequel une action peut fournir une réponse dans un format quelconque : HTML, XML, etc. C'est pour ce type de requête que vous définirez le plus souvent des actions. En général, ce type de requête fournit ses paramètres dans l'url ou dans le corps de la requête HTTP (méthode POST). |
| |
- 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. | - 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. |
- 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. | - La méthode du contrôleur correspondante à l'action est exécutée. La méthode récupère les paramètres de requête pour déterminer les traitements à suivre. |
- Le contrôleur exécute les traitements métiers et récupère éventuellement des résultats qui seront utilisés pour l'affichage | - Le contrôleur exécute les traitements métiers et récupère éventuellement des résultats qui seront utilisés pour l'affichage |
- Le contrôleur instancie un objet de type jResponse auquel il assignera les données à afficher, initialisera les templates etc. | - Le contrôleur instancie un objet de type jResponse auquel il assignera les données à afficher, initialisera les templates etc. |
- Jelix récupère cet objet jResponse, invoque la génération du document en sortie et envoi ce dernier au navigateur. | - Jelix récupère cet objet jResponse, invoque la génération du document en sortie et envoi ce dernier au navigateur. |
| |
| |
| |
Les actions sont implémentées dans ce qu'on appelle des contrôleurs. Les contrôleurs sont des classes contenant des méthodes pour chaque action. Les contrôleurs sont stockés dans des fichiers controllers///nom_controleur//.//type_requete//.php. | Les actions sont implémentées dans ce qu'on appelle des contrôleurs. Les contrôleurs sont des classes contenant des méthodes pour chaque action. Les contrôleurs sont stockés dans des fichiers controllers///nom_controleur//.//type_requete//.php. |
| |
En général, il y a une méthode index() pour l'action par défaut. | En général il y a une méthode index() pour l'action par défaut. |
| |
Modifions donc cette action par défaut. Pour cela, ouvrons le fichier controllers/default.classic.php. Vous devez avoir ce contenu : | Modifions donc cette action par défaut. Pour cela ouvrons le fichier controllers/default.classic.php. Vous devez avoir ce contenu : |
| |
<code php> | <code php> |
| |
Vous remarquerez qu'il y a certaines conventions de nommage. Les classes contrôleurs ont un nom suffixé par "Ctrl". Ce qui précède le suffixe, "default", est le nom du contrôleur, que vous indiquerez dans le paramètre action, et c'est aussi le préfixe du nom du fichier *.classic.php. | Vous remarquerez qu'il y a certaines conventions de nommage. Les classes contrôleurs ont un nom suffixé par "Ctrl". Ce qui précède le suffixe, "default", est le nom du contrôleur, que vous indiquerez dans le paramètre action, et c'est aussi le préfixe du nom du fichier *.classic.php. |
| |
| |
==== Objet réponse ==== | ==== Objet réponse ==== |
Dans la méthode "index()" du controlleur, on récupère dans la variable $rep une réponse de type "html". Vous obtenez en fait un objet de classe jResponseHtml, dérivant de la classe jResponse. | Dans la méthode "index()" du controlleur, on récupère dans la variable $rep une réponse de type "html". Vous obtenez en fait un objet de classe jResponseHtml, dérivant de la classe jResponse. |
| |
Vous verrez plus tard qu'il existe d'autres types de réponses, et que vous pouvez développer vos propres objets response. | Vous verrez plus tard qu'il existe d'autres types de réponses et que vous pouvez développer vos propres objets response. |
| |
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. Par exemple, spécifions le titre de la page : | 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. Par exemple spécifions le titre de la page : |
| |
<code php> | <code php> |
</code> | </code> |
| |
Tout le corps de la page, c'est à dire le contenu de la balise html <body>, doit être généré par vous même, via éventuellement le moteur de template de Jelix : [[manuel:templates|jTpl]]. jResponseHtml instancie en standard un moteur de template, placé dans la propriété body. Le nom du fichier template est à placer dans la propriété bodyTpl. Avant de voir le code, voyons d'abord le contenu du template. | |
| Tout le corps de la page, c'est à dire le contenu de la balise html <body>, doit être généré par vous même, via éventuellement le moteur de template de Jelix : [[manuel:templates|jTpl]]. jResponseHtml instancie en standard un moteur de template placé dans la propriété body. Le nom du fichier template est à placer dans la propriété bodyTpl. Avant de voir le code voyons d'abord le contenu du template. |
| |
==== Le template ==== | ==== Le template ==== |
| |
Un sélecteur comporte un nom de module et un nom de ressource séparés par le caractère "~", comme ceci : **nom_module~nom_ressource**. La partie "**nom_module~**" est facultative quand il s'agit du module courant. Le nom de la ressource n'est pas forcément un nom de fichier, même si la plupart du temps elle désigne un fichier. L'objet qui utilise le sélecteur (ici [[manuel:templates|jTpl]]) sait comment récupérer le fichier correspondant au sélecteur. Vous verrez que les sélecteurs sont abondamment utilisés, et permettent une certaine souplesse et une indépendance vis à vis des chemins de fichiers physiques. | Un sélecteur comporte un nom de module et un nom de ressource séparés par le caractère "~", comme ceci : **nom_module~nom_ressource**. La partie "**nom_module~**" est facultative quand il s'agit du module courant. Le nom de la ressource n'est pas forcément un nom de fichier, même si la plupart du temps elle désigne un fichier. L'objet qui utilise le sélecteur (ici [[manuel:templates|jTpl]]) sait comment récupérer le fichier correspondant au sélecteur. Vous verrez que les sélecteurs sont abondamment utilisés, et permettent une certaine souplesse et une indépendance vis à vis des chemins de fichiers physiques. |
| |
| |
| |
http://localhost/jelix/actu.org/www/index.php?module=news&action=default:index | http://localhost/jelix/actu.org/www/index.php?module=news&action=default:index |
| |
Vous verrez alors s'afficher le contenu du template que l'on vient de créer. (Note | Vous verrez alors s'afficher le contenu du template que l'on vient de créer. |
| |
Le paramètre **module** indique le nom du module. Le paramètre **action** est le nom de l'action à exécuter dans ce module. Ce nom est constitué de deux parties, séparées par deux points ":" (pour les utilisateurs de jelix 1.0beta3.1 ou précédent, il faut utiliser le caractère "_"). La première partie est le nom du contrôleur, la deuxième le nom de la méthode à exécuter. Si il n'y a pas de ":", jelix considère qu'il s'agit du nom de la méthode dans le contrôleur de nom "default". | Le paramètre **module** indique le nom du module. Le paramètre **action** est le nom de l'action à exécuter dans ce module. Ce nom est constitué de deux parties, séparées par deux points ":" (pour les utilisateurs de jelix 1.0beta3.1 ou précédent, il faut utiliser le caractère "_"). La première partie est le nom du contrôleur, la deuxième le nom de la méthode à exécuter. Si il n'y a pas de ":", jelix considère qu'il s'agit du nom de la méthode dans le contrôleur de nom "default". |
* soit vous modifiez le fichier var/config/defaultconfig.ini.php en changeant la propriété charset (en mettant ISO-8859-1 par exemple). | * soit vous modifiez le fichier var/config/defaultconfig.ini.php en changeant la propriété charset (en mettant ISO-8859-1 par exemple). |
| |
| |
---- | |
* Suite : [[tutoriels:principal:config-base|Configuration de la base de données]] | |
* Précedent : [[tutoriels:principal:creation-application|Création d'une application]] | |
* [[tutoriels:principal|Retour au sommaire]] | |