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