Création d'un module sous Magento 2 - Partie 4 - Backoffice

L'objectif de cette partie est d'ajouter un nouveau lien dans le menu du backoffice, et de créer une nouvelle page, qui sera utilisée par la suite pour gérer nos commerciaux. Nous allons aussi contrôler l'accès de cette nouvelle page afin de pouvoir définir quels sont les utilisateurs qui vont pouvoir y accéder. Cette partie va être assez simple, en attendant la prochaine qui sera beaucoup plus complexe.

Le menu

La première chose à faire est de créer un nouveau lien dans le menu. Pour cela, il va falloir créer un fichier etc/adminhtml/menu.xml dans notre module : 

/app/code/Ns/Thorleif/etc/adminhtml/menu.xml
  1. <?xml version="1.0"?>
  2.  
  3. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
  5.     <menu>
  6.         <add id="Ns_Thorleif::main_menu" title="Thorleif"
  7.              module="Ns_Thorleif" sortOrder="20"
  8.              resource="Ns_Thorleif::thorleif" />
  9.         <add id="Ns_Thorleif::index" title="View"
  10.              module="Ns_Thorleif" sortOrder="1" parent="Ns_Thorleif::main_menu"
  11.              action="thorleif/index" resource="Ns_Thorleif::Index" />
  12.     </menu>
  13. </config>

Dans ce code, on ajoute un nouveau picto dans le menu, et, quand on clique dessus, on ajoute un lien qui redirigera vers une action définie (ici Ns_Thorleif::Index). On peut modifier l'emplacement du lien dans le menu pour le mettre où on veut. Dans l'exemple, le lien "Thorleif" sera entre les liens "Products" et "Customers". Pour l'ajout du second lien ("View"), il faut préciser que ce lien est un enfant du premier lien. Une fois fait, voici le résultat obtenu : 

creation-d-un-module-sous-magento-2-partie-4-backoffice

La route

Maintenant que notre lien est créé, il va falloir ajouter une nouvelle route à notre module. Comme nous sommes dans le backoffice, le fichier de route sera situé dans le répertoire etc/adminhtml/ de notre module. Voici un exemple de route : 

/app/code/Ns/Thorleif/etc/adminhtml/routes.xml
  1. <?xml version="1.0"?>
  2. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
  3.     <router id="admin">
  4.         <route id="thorleif" frontName="thorleif">
  5.             <module name="Ns_Thorleif" />
  6.         </route>
  7.     </router>
  8. </config>

Ce fichier est assez simple à comprendre, et vous êtes normalement capable de le faire seul si vous avez suivi les parties précédentes concernant la création d'une route pour le frontoffice. 

Les droits d'accès

Attaquons-nous à la création d'un contrôle d'accès ou ACL en anglais pour Access Control Lists.  Pour faire simple, il s'agit d'un contrôle de droits sur les liens du menu : avec ces options, on peut faire en sorte d'afficher les liens pour certains types d'utilisateurs, mais pas pour d'autres. Dans un Magento de base, on n'a qu'un seul rôle de créé, celui d'administrateur. Mais il se peut qu'un jour vous vouliez créer un rôle qui permettra seulement de créer des produits, et du coup, il va falloir configurer ce rôle pour que les utilisateurs ne puissent avoir accès qu'aux pages produits.

Pour créer un contrôle d'accès propre à notre module, il va falloir créer un fichier etc/acl.xml dans notre module. Ce fichier reprend à peu près le même modèle que le fichier menu.xml

/app/code/Ns/Thorleif/etc/acl.xml
  1. <?xml version="1.0"?>
  2. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.         xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
  4.     <acl>
  5.         <resources>
  6.             <resource id="Magento_Backend::admin">
  7.                 <resource id="Ns_Thorleif::thorleif" title="Thorleif"
  8.                           sortOrder="100">
  9.                     <resource id="Ns_Thorleif::view" title="View"
  10.                               sortOrder="1" />
  11.                 </resource>
  12.             </resource>
  13.         </resources>
  14.     </acl>
  15. </config>

Nous venons de définir un rôle pour le menu que nous venons de créer. Pour configurer ça, on va dans le backoffice, puis System > User Roles. Cliquez sur le rôle que vous voulez modifier, par exemple Administrator, puis dans l'onglet "Role Resources" sélectionnez "custom". On peut voir que tout s'est bien passé. 

creation-d-un-module-sous-magento-2-partie-4-backoffice

Le contrôleur

On a notre route, notre lien dans le menu, et nos contrôles d'accès, il ne nous reste plus qu'à créer notre contrôleur. Comme c'est un contrôleur pour le backoffice, il faudra l'ajouter dans le répertoire Controller/Adminhtml/ qu'il faudra créer. La structure du code reste la même que pour un contrôleur classique, mis à part qu'il hérite de \Magento\Backend\App\Action

/app/code/Ns/Thorleif/Controller/Adminhtml/Index/Index.php
  1. <?php
  2.  
  3. namespace Ns\Thorleif\Controller\Adminhtml\Index;
  4.  
  5. class Index extends \Magento\Backend\App\Action
  6. {
  7.     public function execute()
  8.     {
  9.         var_dump('test'); exit();
  10.     }
  11. }

Voilà, tout est prêt, vous pouvez aller faire un tour dans votre backoffice pour tester tout ça. Dans le contrôleur, on n'aura qu'un simple var_dump() afin de ne pas le surcharger inutilement. En effet, dans la partie suivante, nous allons réutiliser ce code pour afficher une liste de commerciaux grâce au système de Grid de Magento 2.