Développer avec RBS Change : Surcharge d'action

  • 46450.1

    10/11/2011 11:20


    fpaterno
    Rang : Adepte
    Bonjour,

    je souhaite réaliser des traitements supplémentaire lors d'un clic sur un lien du module bookmarks. Pour cela, j'ai besoin "d'injecter" l'action "IndirectUrlAction". J'ai donc créé une action similaire dans mon propre module, mais je ne sais pas comment faire pour que ce soit ma classe qui soit prise en compte et non celle de base.

    J'ai tenté une injection de classe comme elle se pratique sur les services (ajout d'une balise entry dans project.xml) mais sans succès.

    Merci par avance pour votre aide.
  • 46450.2

    10/11/2011 11:54


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    En effet, l'injection ne fonctionne pas sur une action.

    Là le plus simple sera de passer par le remplacement de classe via l'AOP.

    Pour cela il faut que la classe qui remplace étende celle qu'elle remplace (comme c'est d'ailleurs le cas pour l'injection également).

    Il faut ensuite déclarer le remplacement dans le fichier config/aop.xml de la manière suivante :
    <?xml version="1.0" encoding="utf-8"?>
    <aop>
    	<replace pointcut="<classe à remplacer>" class="<nouvelle classe>" />
    </aop>
    Et enfin finir par un compile-aop (ou caop). Commande qu'il faudra relancer à chaque fois que le code de l'une des deux classes sera modifié. À noter aussi qu'elle est lancée automatiquement lors d'un update-autoload.



    Dans la version 4.0, ces deux mécanismes seront unifiés pour simplifier les choses (déclaration unique et mécanique unique aussi).
  • 46450.3

    16/11/2011 12:13


    fpaterno
    Rang : Adepte
    Merci, cela fonctionne pour les actions.

    Je souhaiterais désormais réaliser la même opération pour les classes de blocs.
    Je souhaite surcharger la classe "event_BlockCommentsOnBaseeventAction" pour y réaliser des traitements supplémentaires. Y a t-il un moyen de réaliser cela facilement ?
  • 46450.4

    16/11/2011 14:09


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Comme pour toutes les classes (ou presque... si vous tentez de replacer les classes qui gèrent l'autoload ou l'AOP vous aurez sans doute des surprises) la méthode indiquée plus haut est possible.

    Cependant pour les blocs il est possible de procéder autrement (cette autre méthode est plus souple, notamment parce que le bloc replaçant n'est même pas forcé d'étendre le bloc qu'il remplace).
  • 46450.5

    16/11/2011 16:08


    fpaterno
    Rang : Adepte
    Je n'avais pas trouvé la méthode avec l'attribut "inject". Elle me convient parfaitement !
    Merci beaucoup !
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1378 membres
Aucun membre connecté