Guide Magento Developpeur (Leçon 2) – Créez votre Controller

Guide Magento Developpeur (Leçon 2) – Créez votre Controller

26 juillet 2010

Ce tutoriel est le 2eme d’une longue série, vous allez maintenant apprendre a créer votre controller sous Magento. Si vous n’avez pas lu les premiers articles, je vous conseille fortement de le faire.

Sous magento, vous accedez a votre controller via l’url : http://votresite.com/module/methode/

Vous commencez donc par créer votre module :

1- Créer le dossier dans /app/code/local/Pfay/Test/

Vous créez ainsi votre namespace Pfay et votre module Test.

2- Activez le module dans magento :

Ajoutez un fichier Pfay_all.xml dans /app/etc/module/

Et inserez dedans le code suivant

<?xml version="1.0"?>
   <config>
      <modules>
        <Pfay_Test>
            <active>true</active>
            <codePool>local</codePool>
         </Pfay_Test>
       </modules>
    </config>

Ce fichier permet de déclarer tous les modules de votre namespace Pfay, vous mettrez entre le balises « modules » vos déclaration de modules les unes a la suite des autres.

<Pfay_Test>
   <active>true</active>
   <codePool>local</codePool>
</Pfay_Test>

Pfay_Test vous permet de déclarer le module Test de votre namespace Pfay.
active : true = le module est active
false = le module n’est pas activé

codePool : Le module se trouvera dans le dossier local car c’est un module que nous avons créer nous même (rappelez vous la lecon 1).
Magento trouvera donc les fichiers de ce module dans le dossier /app/code/local/Pfay/Test/

Maintenant, créons le controller :

allez dans /app/code/local/Pfay/Test/

1- Créer le dossier /app/code/local/Pfay/Test/controllers/

2- A l’intérieur créer un fichier IndexController.php qui contiendra :

class Pfay_Test_IndexController extends Mage_Core_Controller_Front_Action
{
   public function indexAction()
   {
     echo 'test index' ;
   }
   public function mamethodeAction()
   {
     echo 'test mamethode';
    }
}

Maintenant, si vous allez sur http://votresite.com/test/index que ce passe t’il ?

Effectivement…vous ne trouvez pas la page, il y a une erreur car vous n’avez pas encore déclaré le controller dans le module.

Config.xml, le fichier pour configurer votre module :

De la même manière que vous avez déclaré votre module pour que magento le prenne en compte dans Pfay_All.xml , il faut que dans le fichier config.xml de votre module, vous déclariez aussi votre controller dans le fichier config.xml de votre module.

Mangento va ainsi trouver votre fichier Pfay_All.xml, il va aller dans votre dossier /app/code/local/Pfay/Test/etc/ et va lire le fichier config.xml pour savoir ou aller chercher votre controlleur et comment fonctionne votre module.

Créez donc dans votre dossier Test, un dossier etc/ avec dedans config.xml.

config.xml contiendra :

<?xml version="1.0"?>
  <config>
     <modules>
        <Pfay_Test>
          <version>1.0.0</version>
        </Pfay_Test>
     </modules>
     <frontend>
       <routers>
          <routeurfrontend>
              <use>standard</use>
              <args>
                 <module>Pfay_Test</module>
                 <frontName>test</frontName>
              </args>
           </routeurfrontend>
       </routers>
    </frontend>
</config>

Explications :

<modules>
  <Pfay_Test>
    <version>1.0.0</version>
   </Pfay_Test>
</modules>

Dance cette partie, on declare l’identité du module, pour que magento puisse vérifié que le module que vous avez declare dans votre fichier Pfay_All.xml est bien celui la et le numéro de version vous permet les mises a jour de votre module.

<routers>
     <routeurfrontend>
        <use>standard</use>
          <args>
             <module>Pfay_Test</module>
             <frontName>test</frontName>
          </args>
     </routeurfrontend>
</routers>

Vous permet de déclarer un routeur « routeurfrontend » qui est en fait la route utilisé par magento pour accéder a votre controlleur.
Dans notre exemple, le routeur est de type « standard », (c’est-à-dire que c’est un module qui s’affichera sur le frontend).

Le nom du module est Pfay_Test et le raccourci pour y accéder via l’url est test ainsi quand on tapera

http://votresite.com/test/index, on arrivera sur la méthode index de votre controlleur IndexController.php (de votre dossier controllers)

Vous pouvez aussi y accéder en utilisant votre routeur a la place du frontName.

http://votresite.com/ routeurfrontend/index/

Testez maintenant votre module :

http://votresite.com/test/index vous renvoie : « test index »(vous pouvez rajouter /index a la fin si vous voulez pour appeler la méthode index mais par défaut, si rien n’est précise il appelle la méthode qui s’appellera « index »)



http://votresite.com/test/index/mamethode vous renvoie : « test ma methode »

Vous savez maintenant créer un controller. Essayez maintenant de bien comprendre ceci en le refaisant chez vous et ca devrai aller pour passer a la suite.

Si vous avez des questions, n’hésitez pas a laisser un commentaire.

Retrouvez le sommaire de ce tutoriel

MT # 12 août, 2010

Tutorial intéressant pour la gestion des controleurs.

Note concernant : http://votresite.com/test/mamethode vous renvoie : « test ma methode »
en fait il s’agit de l’URL /test/index/mamethode , « Index », le contrôleur, doit être spécifié.

# 12 août, 2010 MT

J’ai une petite question concernant « routeurfrontend ». Pourquoi donner un nom ? S’agit-il simplement pour définir le nom qui devra apparaitre dans l’URL, et ce, indépendamment du nom que l’on a donné à notre module ? (je veux dire qu’on peut appeler n’importe comment un module, l’important est surtout le nom que l’on donne au routeur ?)

Matthieu # 12 août, 2010

Salut,

Sur la version 1.4 de Magento

les URL sont les suivantes :

http://votresite.com/test/index
http://votresite.com/test/index/mamethode

Très bon tuto

merci

# 12 août, 2010 admin

@MT :

Le nom qui sera dans l’url sera ce que tu mettras dans ta balise « frontName », l’appeler via son routeur est une solution « de bricolage » on va dire ;)

Le nom du routeur c’est juste pour te retrouver entre les différents routeurs de ton module magento.

@Matthieu :

Effectivement, un petit oubli de ma part c’est modifié ;)

Merci beaucoup.

Reveur # 20 septembre, 2010

Bonjour,

Merci pour vos tuto très bien

Je ne comprends pas je dispose toujours d’une erreur 404 impossible d’acceder à mon nouveau module.
Est ce car j’ai changé de theme initial ? ou est-ce par ce que j’ai l’url rewriting activé ?

C’est extrement frustrant, je me tire les cheveux depuis deux heures,

Bonne soirée,

# 21 septembre, 2010 Pierre FAY

@Reveur: 2heures c’est pas grand chose ^^, si tu as une erreur 404 c’est parce que tu as du oublié un truc. Refais le tutoriel à partir du début tu devrais trouver ton erreur. Si tout le monde y arrive, tu y arrivera forcément même si ca va peu être te prendre un peu de temps. bon courrage ;)

Seb # 24 septembre, 2010

@Reveur : Essaie de désactiver le cache dans l’administration : system > cache management : select all – disable

# 24 septembre, 2010 twentyfloyd

Bonjour et merci beaucoup pour tous ces tutos.

J’ai aussi eu une erreur 404 qui m’a bien embetté et je me suis aperçu que le xml n’aimait pas mes commentaires avec acccents…tout betement^^ Si ça peut aider.

Sirozz # 1 octobre, 2010

Merci pour ce petit tuto bien sympa pour commencer. Pour info, j’ai eu aussi le problème du 404 et cela venait du I majuscule sur le fichier IndexController.php

# 2 octobre, 2010 reveur

Bonjour,

merci pour vos réponse,

malheureusement je ne trouve toujorus pas la source de mon problème extremement frustrant après avoir refait plusieurs fois la code de A à Z.
Toujours cette foutu page 404
Pourtant j’ai bien déclaré mon config xml
(J’ai remplacé Pfay par Anselme pour verifier la logique dans tout les chemins nécessaires)

merci pour vos réponses, comme d’hab cela doit etre un truc tout bete, mais j’ai vraiment vu et revue le code et la encore il est pas long donc c’est simple.

Bien à vous,

Reveur

reveur # 2 octobre, 2010

Bonjour

Voila excusez moi pour la gene occassionné en le refaisant cette fois ci avec Pfay cela a marché mysterieusement. (va savoir pourquoi la premiere fois cela ne marcher pas)
par contre impossible de le faire marcher en changant le nom du namespace (et en modifiant bien entendu les xml et le php en fonction) :)
Pfay sera maintenant mon nom pour mes modules :) merci en tout cas et désolé pour le derangement,

# 12 novembre, 2010 Amel

Merci bcp, après plusieurs tutos j’arrive à le faire avec tuto!

Merci.

Pl4tipus # 16 novembre, 2010

Bonjour à tous !

J’arrive sûrement trop tard Reveur, mais ton problème venait très sûrement du fait que le fichier de déclaration de module devait encore avoir le namespace Pfay (/app/etc/modules/Pfay_Test.xml), c’est un problème qui revient régulièrement quand on suit un tuto car une fois créé, on ne parle plus jamais de ce fichier =).

En espérant que ça en aide certains, je vous souhaite une bonne soirée !

NB : Merci à l’auteur pour ces tutos dont la qualité se fait rare sur la toile =)

# 26 novembre, 2010 Max

Hello,

La ligne suivante comporte apparemment 2 erreurs:

« Ajoutez un fichier Pfay_all.xml dans /app/etc/module/ »

A remplacer par

« Ajoutez un fichier Pfay_All.xml dans /app/etc/modules/ »

Le « A » majuscule de « All » et le « s » à modules

dfr # 2 janvier, 2011

Bonjour,
Tout d’abord merci pour ces tutos pierre (j’espère qu’il y en aura encore d’autre), j’ai également eu le problème de l’erreur 404 comme « Reveur » et d’autre et j’ai finalement compris pourquoi ! (aprés un bon moment).
J’avais plusieurs modules et certains fonctionnaient et d’autres pas ! alors que le code etait identique (mis à part les nom des dossiers bien sur) et qu’il etait bon j’en sur absolument sur. (il n’y a que trois fichiers dans ce tuto !!)
Je me suis finalement rendu compte que à la création des dossiers il ne faut pas copier coller les nom des dossiers à partir des tutos car cela pose problème (même en faisant attention au espace). Voila d’une manière générale ne pas copier le nom des fichiers ni le nom des dossiers à partir de la page de tuto il doit y avoir un problème d’encodage de caractères ou autre ! Perso je travaille avec Eclipse pour PHP et une version Magento 1.4.2.0. J’espère que cela pourra eviter a d’autres de longue heures a ne pas comprendre pourquoi cela ne fonctionne pas alors que le code est bon !

Encore merci pierre, et tout mes encouragements pour la suite …

# 16 janvier, 2011 cugel

Bonjour,
Je me demandais si le faire en localhost ne pouvait pas provoquer une erreur 404. Car l’url n’est pas tout à fait identique. Mon url est http://127.0.0.1/magento/, j’ai imaginé que la suite devait-être http://127.0.0.1/magento/test/index/.
Est cela?
Encore merci

lsga # 25 janvier, 2011

Dans config.xml, est-ce que routeurfrontend doit être écrit tel quel ou bien s’agit il d’une variable que l’on doit renommer en fonction de notre installation ?

# 28 janvier, 2011 patract

merci pour le tuto, j’ai tout teste mais ca veut pas, deux serveur differents : meme probleme.
un type du canal irc magento-fr a teste lui ca marche avec mon module…
la poisse
au cas ou qqun passe par la:
http://www.fragento.org/Questions-de-programmeurs/43702-Probleme-tutoriel-pierre-fay.html

Geeko # 3 février, 2011

Bon tuto, mais malgré mon acharnement, rien n’y fait.
Pourtant tout suivant sans rien changer, pris en compte les remarques des précédents messages.
Frustrant, toujours Err 404.

Est-ce que le fait d’avoir installé les données de démo peuvent gêner ?
Je vais essayer avec un Magento vide.

En tout cas, un grand merci pour ce tuto, il m’a donné envie de développer sous Magento.

# 4 février, 2011 assahmed

Bonjour,
J’ai la version 1.4.2 j’ai suivi la procédure mais quand je tape http://www.monsite.com/test/index, j’ai toujours la page d’erreur. J’ai fais tous modifications vues dans les commentaires mais rien. Merci pour votre aide

benjion # 7 février, 2011

comment j’en ai chù*^$ ! pour passer cette étape!

ça marche enfin! bref pour ma part c’est la partie template qui merdait, et après lecture des coms, j’ai mis le phtml dans mes dossiers persos et ça marchait.

merci pour le tuto en tout cas.

# 8 février, 2011 Lasauce

Juste une précision pour les personnes qui utilisent le copier/coller, il manque les balises dans le source de IndexController.php

ça devrait débloquer quelques pages 404.

Ensuite les URLs peuvent être différentes suivants la version. Pour moi dans l’exemple c’est :
http://monsite.com/magento/index.php/test/index/
http://monsite.com/magento/index.php/test/index/mamethode

Lasauce # 8 février, 2011

Pour le modo, dans mot 1er post, il manque un mot :

« il manque les balises php dans le source de IndexController.php »

au lieu de :

« il manque les balises dans le source de IndexController.php »

Merci

# 28 février, 2011 Dan

Bounjour,

tout d’abord merci pour ces tutos! En revanche toujours des erreurs 404 qui vraiment sortent de nulle part… Ce tuto est-il valable pour les dernières versions de Magento?

Cool # 3 mars, 2011

Tres content de cette tuto simple mais pratique.

J’avais le 404, et en relisant j’avais mis IndexControllers.php avec S loool,

Meme copier coller on a du mal quelle vie!!!!! je vais finir par aller vendre du riz

# 7 mars, 2011 Cool

Une chose essentielle.

Faut dire que routeurfrontend est l’identifiant de la route. Donc il doit etre unique. je me suis amusé à crée beacoup de module dans le meme namespace. Depuis 3 jours seulement un marchait tous les autres me redirigeait vers le 404. Du coup aujourd’hui je viens de comprendre le probleme

01
02
03
04
05 1.0.0
06
07
08
09
10
11 standard
12
13 Pfay_Test
14 test
15
16
17
18
19

vince # 8 mai, 2011

concernant les URL :
http://votresite/index.php/test/index/
http://votresite/index.php/test/index/mamethode

Il est possible d’enlever « index.php » avec le paramétrage suivant.

— Config apache :
Dans la config apache de votre serveur remplacez
AllowOverride None
par
AllowOverride All

ce qui aura pour effet de prendre en compte le fichier .htaccess

— Ensuite dans l’admin magento :
Système > configuration > web (en français)
utilisez la réécriture de serveur web

— Réindexez (juste au cas où)

Normalement les URL seront :
http://votresite/test/index/
http://votresite/test/index/mamethode

A Noter :
J’ai remarqué que magento n’aimait pas trop les sites accessibles en local et qui lui fallait, pour votre site, un nom de domaine avec une extension (.fr, .com, .local…)

Voilà…
Sinon, bonne série de tutos, je m’en sers en pense-bête. Je ne crois pas avoir vu d’articles sur les API

# 1 juin, 2011 Adrien

Pour tous ceux qui ont un problème d’affichage de module (404 not found). Allé dans le back-office, System –> Cache Management. Cocher alors « configuration » puis faite un refresh

taybo # 11 juillet, 2011

c bon comme tuto, mais j’ai essayé de mettre http://127.0.1.1/magento au lieu de http://votresite.com/ mais ça pas marché, si je dois créer un site comment faire?

# 11 juillet, 2011 taybo

j’utilise magento 1.5

JPC Web # 9 septembre, 2011

Pour Magento 1.6.0.0, voici l’url fonctionnel:

url/magento/nom_de votre_module/index/

Vous devriez voir votre module…

Conseil Supplémentaire:
1. Effacez constamment votre cache ou désactivez le.
2. Utilisez la ré-écriture d’URL
3. Vérifier vos codes ainsi que les noms de dossiers/fichiers

# 3 octobre, 2011 clasie

Merci pour le tuto. Un peu étrange le nom du controlleur ‘adminhtml_index’.
Bonne continuation!

Mofdi # 25 octobre, 2011

Merci bien pour ce TUTO
J’ai eu un petit problème de cache, mais ça va très bien

# 28 octobre, 2011 Jym

Bonjour,

Magento me rend dingue!

Le cache est desactivé et dans le doute je le vide à chaque fois à la main (var/cache).

Il y a trop peu de fichier et de code pour avoir à y passer des heures pour resoudre un bug de saisi.

Cela fait plus d’un jour que je tourne en rond sur du simple code qui marche une fois sur deux au point que c’est à rendre fou!

Je le copie à la main, il marche pas, je le copie colle il marche, je le duplique et je modifie le nom du module et du frontname, ça marche, je fais des modifications sur l’original (tuto 2) il ne marche plus , je prend le meme modele qui fonctionne et modifie simplement 3 valeurs, toutes cohérentes, je ne suis pas nul à ce point et voilà que ça ne marche plus…bref, ça marche quand ça veut, impossible d’avancer plus loin, je trouve ça grave. Jamais passé autant de temps pour si peu d’action dans le code.

Et le plus rageant, j’ai d’un coté un module qui a le meme code sauf le nom des 2 repertoires et du module et du frontname, je le duplique, modifie simplement 3 valeurs, et ça ne marche plus, j’ai beau prendre mon temps sur chaque caracteres saisi, copier coller, tout arreter, tout redemarrer et rien n’y fait, ça ne veut pas marcher, c’est incomprehensible!

Si quelqu’un à une solution, je suis sur magento 1.6.1.0 sur wamp sous vista, j’ai pas de soucis avec zend, symfony, joomla, spip…faut il un nom de domaine (vhost apache?) ou peut on toujours faire avec localhost ou 127.0.0.1?

atinaus # 4 novembre, 2011

Je suis un peu perdu…

Je tourne sur magento1.5.1.

Mon fichier IndexController.php contient le code suivant

Si je comprends bien, cette classe ci-dessus va chercher la fonction indexAction dans le fichier app/code/core/Mage/Core/Controller/Front/Action.php

Mais le souci, c’est que je ne vois pas cette fonction « indexAction » dans le fichier app/code/core/Mage/Core/Controller/Front/Action.php

Ai je bien tout compris???

Merci pour votre aide.

1-

# 4 novembre, 2011 atinaus

Voici le bout de code
 »

class Taunais_Test_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
echo ‘test index’ ;
}
public function mamethodeAction()
{
 echo ‘test mamethode’;
}
}
« 

Soulso # 14 novembre, 2011

Attention pour la version 1.6.0, su vous avez une erreur 404, cela peut être dut à la langue dans mon cas l’URL est la suivante :

http://votresite.com/en/cellar/index/

Si cela peut résoudre quelques erreurs 404

En tout cas merci pour ce tuto vraiment sympa.

Bon courage à tous…

# 25 novembre, 2011 Pierre FAY

Bonjour @atinaus, non, ton fichier vas en fait chercher l’indexAction() de ta calsse Taunais_Test_IndexController, relis ce tutoriel en commencant par le debut et suis bien toutes les étapes. essayes de bien comprendre l’utilité du config.xml

Bon courrage ;)

Pierre FAY # 25 novembre, 2011

Merci Mofdi, sur magento les problemes de cache…c’est souvent :)

# 19 décembre, 2011 Djo77

Ahahah moi je viens de passer 2h30 à chercher mon erreur et tous bêtement dans IndexController.php j’avais oublié de mettre

<?php ?>

… je pense que mon message aidera beaucoup de monde hihihi

Bon tuto :p

Pierre FAY # 19 décembre, 2011

Oui ca m’arrive de temps en temps aussi ;) merci Djo77 :)

# 21 décembre, 2011 stephan

personnellement c’est « routeurfrontend » qui m’a mis dans l’expectative..
pour un novice, merci de préciser que ce doit etre un LABEL UNIQUE !.. car en créant plusieurs modules pour retester j’ai remis ce même nom.

Pidoux75 # 23 décembre, 2011

Bonjour à tous.

Tout d’abord, merci pour ce tuto :)

Bon j’ai moi aussi eu des erreurs 404, et le conseil c’est faites bien attention aux noms que vous tapez et aussi (et surtout je dirais) à l’encodage de caractères que vous utilisez.

Perso j’ai commencez le tuto avec UltraEdit (que je n’utilise quasiment plus et qui est configurer en ansi standard (je m’en sers beaucoup plus pour le C qu’autre chose) et j’ai continué avec PHPDesigner qui lui par défaut est configuré en UTF-8, et bizarrement quand je reprenais l’exemple depuis le début en utilisant « /Pfay/Test/ » et le reste, ça fonctionnait vu que je faisais tout avec PHPDesigner.

Dés que je reprenais les anciens sources avec « /Pidoux/Test/ » commencés avec UltraEdit, ça remerdait :)

# 23 décembre, 2011 greg

salut j’ai quelques petit soucis,

pour les url j’a utilisé ceci
http://votresite/index.php/test/index/
http://votresite/index.php/test/index/mamethode

ça marche pour l’index mais par contre erreur 404 pour mamethode

Briag # 7 janvier, 2012

Bonsoir,

Tout d’abord, merci pour les tutos, ça aide un max ;)

Moi aussi j’ai beaucoup bloqué sur une 404 Grrrr.
J’ai tout d’abord fait toutes les leçons sans avoir aucun soucis mis à part ceux due à mon inattention.

Maintenant je recommence de zéro pour faire mes propres modules et là, c’est le drame !
J’ai relu et refais plusieurs fois le tuto avec mes propres infos, le plus rigoureusement possible qui me donnait toujours en encore le même résultat : 404.

J’ai tout regardé, même à tester le nom de mon module qui se nomme ‘VideoPub’ … Majuscule du chameau qui serait en cause !?
Non, mais c’est pas si loin…

l’erreur vient de mon fichier de config sur la balise ‘routeurfrontend’. en chameau à savoir ‘routeurFrontend’ plus d’erreur 404.

Alors je réouvre le code que j’ai écrit en suivant le tuto donc la config pour le module ‘Test’ dans lequel ‘routeurfrontend’ ne pose aucun problème au bon fonctionnement du module sans ce F.

J’avoue rester un peu con mais bon…. je mets ça sur les joies de l’informatique ‘logique et binaire’ XD.

Donc peut-être pour ceux qui serait encore bloquer sur 404, essayer en ‘chameautant’ tous les noms.

PS: J’en profite pour rejoindre un commentaire posté sur une autre leçon, je confirme que l’utilisation de ‘Test’ un peu partout déroute lorsque l’on veux revenir sur les leçon précédente :/

Encore merci Pierre ;)

# 16 janvier, 2012 Pierre FAY

Super réponse Briag :) MErci beaucoup

eddz # 16 janvier, 2012

très bon tutoriel, un grand merci Pierre le Boxer ^^

# 18 janvier, 2012 jcleve

J’ai aussi eu droit aux 404, argh
Après 2h de lutte et du debug de Mage, j’ai trouvé.
je suis sous Magento 1.6.1, contexte /magento

Et il fallait renseigner un magasin :
/magento/eco
=>404
/magento/default/eco/
=>test index

Pas de front sans magasin, malgré le fait qu’il s’appelle default ?! A creuser.

Olivier.D # 18 janvier, 2012

Félicitation pour ton travail Pierre :)
S’il te plaît, ne t’arrêtes surtout pas !
Merci ~

# 19 janvier, 2012 Pierre FAY

@Olivier .D Merci :) en ce moment legere pose j’ai pas trop le temps de blogger mais ca va revenir en fevrier ;)

Vous aussi donnez votre avis
Votre nom : (requis)
Votre email :
Votre message :


  • Inscription

    Inscrivez vous a la newsletter pour être prévenu des nouveautés du blog !

    Bien sur votre vie privée est respectée et vos informations resteront privées et en sécurité.

  •