Après avoir déclaré et activé notre module, nous allons voir comment créer un controller frontend pour votre module. Le controller vous permettra d’appeler votre module avec une URL du type :
http://magento2.lan/helloworld
http://magento2.lan/helloworld/say
http://magento2.lan/helloworld/say/hello
Déclaration du routeur
Afin de dire à Magento les routes que vous voulez créer, nous allons passer par un xml. Créez le fichier :
app/code/Maxime/Helloworld/etc/frontend/routes.xml
Et mettez le contenu suivant :
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route id="helloworld" frontName="helloworld"> <module name="Maxime_Helloworld" before="Magento_Core" after="Magento_Sales" /> </route> </router> </config>
Comme vous pouvez le remarquer, nous précisons un fichier XSD qui définira la structure de notre XML.
Ensuite nous avons la séquence router id="standard"
, qui nous permet de dire que c’est un controller « frontend », par opposition au routeur admin qui concerne le BO de Magento.
Le noeud route
se décompose ainsi :
– id : identifiant unique de votre route.
– frontName : c’est la chaîne de caractère qui sera présente dans votre URL d’appel.
Puis vient le noeud module
qui permet de définir :
– name : le module à appeler
– before : votre module devra passer en priorité par rapport au module défini
– after : votre module passera après le module défini
Les champs « before » et « after » sont facultatifs
Création du controller
Maintenant que nous avons expliqué à Magento le chemin à prendre, nous allons le créer. Commençons par créer une url du type :
http://magento2.lan/helloworld
Créez les dossiers nécessaires pour créer le fichier suivant :
app/code/Maxime/Helloworld/Controller/Index/Index.php
Mettez-y le contenu suivant :
<?php namespace Maxime\Helloworld\Controller\Index; class Index extends \Magento\Framework\App\Action\Action { public function execute() { echo 'Execute Action Index_Index OK'; die(); } }
Le namespace
respecte l’arborescence de vos fichiers dans le dossier app/code
Le nom de la class
correspond au nom de votre fichier PHP.
Si vous vous rendez sur l’URL de votre module :
http://magento2.lan/helloworld
Vous aurez une page blanche, avec le message Execute Action Index_Index OK
Si vous avez une erreur du type :
Please upgrade your database: Run "bin/magento setup:upgrade" from the Magento root directory.
Lancez la commande suivante à la racine de votre Magento :
./bin/magento setup:upgrade
Personnaliser les URL
Notre URL précédente est basique :
http://magento2.lan/helloworld
En réalité Magento 2 la converti de la façon suivante :
http://magento2.lan/helloworld/index/index
Le premier « index » est le dossier créé dans « Controller »
Le deuxième « index » est le nom de la classe dans le dossier « Index ».
Vous devinez donc comme moi comment créer ces URL :
http://magento2.lan/helloworld/say
http://magento2.lan/helloworld/say/hello
Je vous conseille de chercher d’abord par vous-même, vous trouverez quand même la solution ci-dessous :
Pour l’URL http://magento2.lan/helloworld/say
– Créer un dossier « Say » et le fichier « Index » de la sorte
app/code/Maxime/Helloworld/Controller/Say/Index.php
Nous y mettrons le contenu suivant :
<?php namespace Maxime\Helloworld\Controller\Say; class Index extends \Magento\Framework\App\Action\Action { public function execute() { echo 'Execute Action Say_Index OK'; die(); } }
Pour l’URL http://magento2.lan/helloworld/say/hello
– Créer un dossier « Say » et le fichier « Hello » de la sorte
app/code/Maxime/Helloworld/Controller/Say/Hello.php
Nous y mettrons le contenu suivant :
<?php namespace Maxime\Helloworld\Controller\Say; class Hello extends \Magento\Framework\App\Action\Action { public function execute() { echo 'Execute Action Say_Hello OK'; die(); } }
Pour le moment vous avouerez que ce n’est pas très sexy, mais dans la prochaine étape, nous apprendrons comment créer un Block avec Magento 2.
Merci pour ces tutos qui je l’espère vont m’aider à découvrir Magento.
Je bloque sur un premier problème :
404 lorsque j’essaie d’accéder à l’URL /helloworld
Qu’est ce qui pourrait causer cela ?
Mais avant ça, ma fresh install de Magento 2 ne contient pas de dossier app/code
Dans /app j’ai des dossiers /design et /etc uniquement
Il y a déjà un problème sur mon install ?
Merci
concernant le dossier /code, il faut le créer.
Pour la 404, j’ai repris le tuto de 0 et ça passe maintenant.
Mais je n’ai pas compris quelle était mon erreur …