Remplacer un contrôleur principal de Pimcore
Je travaille sur un projet Pimcore depuis un certain temps maintenant, je n’ai jamais touché à PHP et Symfony de ma vie donc ça a été un beau défi.
La documentation est géniale, je veux dire, sérieusement, elle est géniale, mais on dirait qu’elle n’est pas faite pour les débutants sur le langage/le framework, donc tout ce que j’ai fait, j’ai dû en prendre des notes.
Après avoir appris que vous pouvez étendre Pimcore en utilisant des bundles, j’ai passé des heures et des heures à essayer de remplacer les contrôleurs, les méthodes javascript et bien plus encore.
Donc, dans cet article, je vais expliquer comment j’ai réussi à remplacer un contrôleur. Comment remplacer les fichiers javascript viendra plus tard 😎.
Création du bundle
Tout d’abord, nous devons créer un bundle pour cela, c’est assez simple car c’est documenté dans la documentation Pimcore, il nous suffit d’exécuter bin/console pimcore:generate:bundle --namespace=EmiDemo/EmiDemoBundle sur le dossier du projet.
Cela suscitera quelques questions mais il n’y a pas de quoi s’inquiéter.

Cela créera un nouveau dossier sous le dossier src avec l’espace de noms que nous avons déclaré précédemment, et à l’intérieur nous aurons tous les fichiers nécessaires pour le bundle.

De plus, le plugin sera détecté par le site d’administration de Pimcore, mais il sera désactivé, vous devrez l’activer pour commencer à l’utiliser.

Remplacer une méthode depuis un contrôleur
Pour remplacer une méthode dans un contrôleur, vous devez évidemment d’abord trouver l’action que vous souhaitez mettre à jour, cela semble facile mais je vais vous donner la façon dont je le fais habituellement (appris de mon coéquipier Cesar).
Allez d’abord dans la page sur laquelle vous pensez que le contrôleur agit, dans mon cas, je veux vérifier celle qui se charge lorsque nous ouvrons un actif
Il suffit ensuite d’ouvrir la console et d’aller dans l’onglet réseau, de refaire les mêmes étapes et d’essayer de retrouver l’action
Avec ces informations, vous pouvez voir que l’action qui charge l’actif est http://localhost/admin/asset/get-data-by-id?_dc=1607601778450&id=2&type=image. À partir de là, nous pouvons voir que l’action du contrôleur est get-data-by-id.
Rechercher l’action dans le contrôleur principal
Pour moi, le moyen le plus simple de le faire est simplement de rechercher dans tous les fichiers de Visual Studio Code
Il en trouvera probablement plusieurs, vous devez donc y jeter un œil et décider lequel est le bon. Dans notre cas, nous travaillons avec des actifs, il est donc clair que nous voulons utiliser le AssetController.php.
Modifier le contrôleur principal
Cela dépend du développeur, je ne le fais généralement pas car il est plus rapide de simplement remplacer le contrôleur et de développer à partir de là. Mais je recommanderais d’abord de mettre à jour le contrôleur dans le bundle principal pour voir si vos modifications fonctionnent.
Dans notre cas je retournerai juste un message au début de la méthode pour vérifier qu’elle fonctionne.
return $this->adminJson(['success' => false, 'message' => "Overriding the getDataByIdAction in the core!!"]);
Ensuite, rechargeons notre actif et vérifions l’onglet réseau
Gardons ce que nous avons là-dedans, afin que nous sachions plus tard que nous utilisons le message groupé au lieu du message principal.
Maintenant, copions simplement cela dans un fichier temporaire pour suivre ce que nous avons fait.
Déplacez ces modifications vers le bundle
Maintenant, afin de déplacer ces modifications vers notre bundle, nous avons d’abord besoin de certains éléments de notre contrôleur principal :
- Espace de noms
- Importations
- Nom du contrôleur
Et évidemment la méthode getDataByIdAction qui est celle que l’on souhaite remplacer.
Exposer le contrôleur
Nous devons exposer le contrôleur, pour ce faire, vous devez aller dans le fichier /src/EmiDemo/EmiDemoBundle/Resources/config/pimcore/routing.yml et ajouter
options:
expose: true
Nous devons également remplacer le prefix par celui que nous allons remplacer, dans notre cas le contrôleur admin .
Donc à la fin ça ressemblera à ça
emi_demo_emi_demo:
resource: "@EmiDemoEmiDemoBundle/Controller/"
type: annotation
prefix: /admin
options:
expose: true
DefaultController.php
Dans notre fichier, nous ajouterons les importations et étendrons le contrôleur avec celui que nous remplacerons
Ensuite, nous copierons simplement la méthode du contrôleur principal et, dans notre cas, mettrons à jour le message que nous renvoyons.
Si vous vous en souvenez, nous avons déjà un message dans le contrôleur principal : Overriding the getDataByIdAction in the core!! et maintenant nous devrions voir Overriding the getDataByIdAction in the bundle!!
Ne renvoyons rien et voyons que nous pouvons maintenant voir la page comme elle était avant
Commentez l’instruction return et rechargez
C’est tout
Et avec cette petite démo, vous pouvez voir avec quelle facilité vous pouvez remplacer un contrôleur principal Pimcore existant. Il y a certaines étapes que vous devez suivre mais ce n’est rien de difficile. Assurez-vous simplement d’exposer le contrôleur et de vider le cache de temps en temps pendant que vous apportez des modifications, parfois il est mis en cache et vous êtes bloqué en pensant qu’il ne fonctionne pas et qu’il est simplement mis en cache.
Si vous vous demandez comment remplacer les fichiers javascript, cela viendra dans un autre tutoriel 😁.









