Zend Framework 2 : le module de base
Article posté le 05-06-2014 dans la catégorie
PHP
Attention, le contenu cet article est peut-être obsolète !
Mettre en place la base de votre module sous Zend Framework 2Voici comment mettre en place la base de votre module sous Zend Framework 2 (que nous appellerons ici ZF2 pour des raisons de commodités).
Le module est l'élément de base de votre développement sous ZF2 : c'est ici que se trouveront tous vos fichiers (à l'exception de ceux qui seront accessibles au public, qui eux se trouvent dans le dossier "public").
1- Arborescence
Voici donc l'arborescence ainsi que les fichiers que vous devez créer pour votre module de base :

Comme vous pourrez le constater à l'usage, la mise en place d'un nouveau module commence par la création de tous ces répertoires ainsi que de certains fichiers obligatoires avec du code dedans. Cela est un peu lourd, mais c'est un passage obligé. Avant de vous expliquer cette aroborescence, un petit rappel sur les règles de nommage s'impose.
Conventions de nommage :
- Le répertoire d'un module (donc le répertoire racine ainsi que celui qui se trouve dans le dossier src ) s'écrit en CamelCase. Par exemple : MonModule
- Le nom des fichiers contenant le code source, c'est à dire les contrôleurs, les modèles... s'écrivent aussi en CamelCase.
- Le nom des répertoires qui contiendront les vues s'écrivent avec la première lettre en majuscule
Explications de l'arborescence :
- Biblio : le répertoire de votre module. Pour notre exemple, il contient tout ce qui est ci-dessous :
- Répertoire config : Il contient les éléments nécessaires pour
- Associer les routes aux contrôleurs
- Charger les contrôleurs
- Définir les vues à utiliser
- Définition des paramètres d'internationalisation
- Le fichier module.config.php : il se trouve dans le répertoire config et contient les paramètres cités ci-dessus.
- Répertoire src : Contient le code source du module, donc toutes les classes (modules, formulaires, controlleurs) :
- Il contient un répertoire portant le nom du module, qui lui même contient un répertoire pour chaque type de classe, par exemple
- Controller (obligatoire)
- Model (optionnel)
- Form (optionnel)
- Répertoire view : contient le code source des vues, il s'agit de code HTML avec des inclusions de codes PHP
- Fichier Module.php : configuration des fonctionnalités du module comme le chargement automatique des classes
- Fichier autoload_classmap.php : Contient les chemins d'accès aux classes (facultatif, mais nécessaire pour notre exemple, nous verrons pourquoi)
2- Fichier Module.php
Comme expliqué plus haut, il s'agit d'une classe intégrant les fonctionnalités du modules ainsi que leur configuration (donc pas la configuration du module en lui-même qui se trouve ailleurs).
Nous travaillons dans l'espace de nom Biblio.
Ici nous devons paramétrer deux choses pour notre exemple :
Le système de chargement des classes
ZF2 en propose 2 :
- StandardAutoLoader : Automatique : il trouvera les classes tout seul si vous respectez les conventions de nommage
- ClassMapAutoloader : Nécessite un tableau contenant le chemin où trouver les fichiers des classes. C'est pour cela que je vous ai parlé plus haut du fichier autoload_classmap.php. En effet, j'ai choisi ce système car il est plus rapide (entendre par là : performance de l'application).
- Note : il est possible de faire cohabiter les deux !
Le chargement du fichier de configuration
Il faut implémenter la fonction getConfig déclarée dans l'interface ConfigProviderInterface.
Voici le contenu de notre classe :
namespace Biblio;
use ZendModuleManagerFeatureAutoloaderProviderInterface;
use ZendModuleManagerFeatureConfigProviderInterface;
class Module implements AutoloaderProviderInterface
{
public function getAutoloaderConfig()
{
return array(
'ZendLoaderClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}
?>
Note : si vous aviez voulu utiliser le StandardAutoloader, voici ce qui l'aurait fallu rajouter à la fonction getAutoLoaderConfig() :
'ZendLoaderStandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
Bien ! Pour notre exemple, nous allons juste créer une page d'accueil pour notre module. Nous devons donc créer le contrôleur et la vue.
3- Le contrôleur
Dans le fichier IndexController.php mentionné dans l'arborescence, nous devons créer une classe qui hérite de la classe abstraite AbstractActionController. Nous ne déclarons qu'une seule méthode pour l'instant : indexAction.
namespace BiblioController;
use ZendMvcControllerAbstractActionController;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return array();
}
}
?>
4- La vue
Dans le dossier index du répertoire view : créez un fichier nommé index.phtml (comme dans l'aborescence en haut de cette page). Placez du texte à l'intérieur et enregistrez.
5- L'autoload_classmap
Ici, comme expliqué plus haut, nous retournons un tableau contenant deux colonnes :
- Le nom complet de la classe demandée
- Le chemin relatif de son fichier
return array(
'BiblioControllerIndexController' =>
__DIR__ . '/src/Biblio/Controller/IndexController.php',
);
?>
6- Le fichier de configuration
Enfin, avant de pouvoir tester en tapant l'URL monsite/biblio, vous devez remplir votre fichier de configuration module.config.php. Ici on trouvera tous les paramétrages du module : définition de l'espace de nom, routes et contrôleurs associés, vues à appeler...
return array(
'controllers' => array(
'invokables' => array(
'BiblioControllerIndex' =>
'BiblioControllerIndexController'
),
), // Fin controlleur
'view_manager' => array(
'template_map' => array(
'biblio/index/index' =>
__DIR__ . '/../view/biblio/index/index.phtml',
),
'template_path_stack' => array(
'biblio' => __DIR__ . '/../view',
), // fin template path stack
), // Fin view manager
'router' => array(
'routes' => array(
'biblio' => array(
'type' => 'Literal',
'options' => array(
'route' => '/biblio',
'defaults' => array(
'__NAMESPACE__' => 'BiblioController',
'controller' => 'Index', (1),
'action' => 'index', (2)
),
),
'verb' => 'get',
'may_terminate' => true,
),
),
),// Fin router
);
?>
Cet article vous a plu? Découvrez d'autres articles :