Remplacer un contrôleur principal de Pimcore

· 4 min de lecture

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

Image de Gyazo

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

Image de Gyazo

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

Image de Gyazo

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!!"]);

Image de Gyazo

Ensuite, rechargeons notre actif et vérifions l’onglet réseau

Image de GyazoGardons 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

Image de Gyazo

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

Image de Gyazo

Ensuite, nous copierons simplement la méthode du contrôleur principal et, dans notre cas, mettrons à jour le message que nous renvoyons.

Image de Gyazo

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!!

Image de Gyazo

Ne renvoyons rien et voyons que nous pouvons maintenant voir la page comme elle était avant

Image de Gyazo

Commentez l’instruction return et rechargez

Image de Gyazo

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 😁.