Formation Magento 2 : Chapitre 2 – Partie B

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.

Continuer la formation
Revenir à la partie précédente
Création d’un controller frontend sous Magento 2
Taggé sur :    

2 thoughts on “Création d’un controller frontend sous Magento 2

  • 04/07/2016 à 16:31
    Permalink

    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

    Répondre
    • 13/07/2016 à 17:55
      Permalink

      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 …

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok