0 follower

Module

Un module est un bout de logiciel autonome qui comporte des modèles, des vues, des contrôleurs et autres composants nécessaires à son bon fonctionnement. Sous plusieurs aspects, un module ressemble à une application. La principale différence est qu'un module ne peut être déployé seul et doit absolument être inclus dans une application. Les utilisateurs peuvent accéder aux contrôleurs d'un module comme ils le font avec les contrôleurs de l'application.

Les modules sont utiles dans plusieurs cas. Pour une application à grande échelle, il est possible de la diviser en plusieurs modules, chacun étant développé et maintenu indépendament. Des fonctionnalités génériques partagées telles que la gestion des utilisateurs ou des commentaires peuvent être déployées sous la forme de modules et ainsi être réutilisées simplement dans d'autres projets.

1. Créer un Module

Un module est organisé à l'intérieur d'un dossier. C'est le nom de ce dossier qui définit son identifiant unique ID. La structure d'un module est similaire à celle du dossier de base de l'application. Ci-dessous, la structure du module forum:

forum/
   ForumModule.php            La classe du module
   components/                Composants réutilisables
      views/                  Vues widget
   controllers/               Contrôleurs
      DefaultController.php   Contrôleur par défaut
   extensions/                Extensions tierces
   models/                    Modèles
   views/                     Vues et Layouts
      layouts/                Layouts
      default/                Vues du contrôleur par défaut
         index.php            La vue index

Un module doit avoir une classe qui étends CWebModule. Le nom de cette classe est défini par l'expression ucfirst($id).'Module', où $id correspond à l'ID du module (ou au nom du dossier du module). La classe du module est le noyau central qui gére et sauvegarde toutes les informations partagées entre tout le code du module. Par exemple, il est possible d'utiliser CWebModule::params pour sauvegarder les paramètres, et d'utiliser CWebModule::components pour partager les composants applicatifs au niveau du module.

Astuce: Il est possible d'utiliser le générateur de module disponible dans Gii pour créer un squelette de module.

Astuce: Il est possible d'utiliser l'outil yiic pour créer le squelette d'un module. Par exemple, pour créer le module forum, il faut exécuter la commande CLI suivante:

% cd WebRoot/testdrive
% protected/yiic shell
Yii Interactive Tool v1.0
Please type 'help' for help. Type 'exit' to quit.
>> module forum

2. Utilisation d'un Module

Pour utiliser un module, il faut le déployer dans le dossier modules du dossier de base de l'application. Il faut ensuite déclarer l'ID du module au niveau de la propriété modules de l'application. Par exemple, pour pouvoir utiliser le module forum, il est possible d'utiliser la configuration d'application:

return array(
    ......
    'modules'=>array('forum',...),
    ......
);

Un module peut aussi être configuré. L'usage est très similaire à la configuration des composants d'application. Par exemple, le module forum pourrait avoir une propriété nommée postPerPage au sein de sa classe et qui pourrait être configurée dans la configuration de l'application comme suit:

return array(
    ......
    'modules'=>array(
        'forum'=>array(
            'postPerPage'=>20,
        ),
    ),
    ......
);

L'instance d'un module peut être accédée via la propriété module p du contrôleur courant. Au travers de l'instance du module, il est possible d'accéder aux informations qui sont partagées au niveau du module. Par exemple, au lieu d'accéder à postPerPage, il est possible d'utiliser l'expression suivante:

$postPerPage=Yii::app()->controller->module->postPerPage;
// où $this référence l'instance du contrôleur
// $postPerPage=$this->module->postPerPage;

L'action d'un contrôleur d'un module peut être accédée en utilisant la route moduleID/controllerID/actionID. Par exemple, en assumant que le module forum a un contrôleur nommé PostController, il est possible d'utiliser la route forum/post/create pour référencer l'action create au sein du contrôleur. L'URL correspondant à cette route serait http://www.exemple.com/index.php?r=forum/post/create.

Tip: Si un contrôleur et dans un sous-dossier de controllers, il est possible d'utiliser le format de route ci-dessus. Par exemple, si PostController est sous forum/controllers/admin, il est possible de référence l'action create en utilisant forum/admin/post/create.

3. Modules Imbriqués (nested)

Les modules peuvent être imbriqués. Le premier est appelé module père et le second module fils. Les modules fils doivent être placés dans le dossier modules du module père. Pour accéder à l'action d'un contrôleur d'un module enfant, il faut utiliser la rout parentModuleID/childModuleID/controllerID/actionID.

Found a typo or you think this page needs improvement?
Edit it on github !