Il existe un moyen plus propre que de remplacer l'ensemble du contrôleur. Il est également déconseillé de remplacer un contrôleur complet en raison de l'absence de compatibilité avec les mises à jour. Dans le pire des cas, quelque chose comme ça pourrait tuer l'ensemble du site. Il ya quelque temps, j'ai créé un fil dans le shopware forum(allemand) discuter du même problème. Je voulais étendre un finishAction() existant dans le contrôleur de caisse.
public function onPostDispatchCheckout(\Enlight_Controller_ActionEventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->getSubject();
/** @var \Enlight_Controller_Request_Request $request */
$request = $controller->Request();
if ($request->getActionName() !== 'finish') {
return;
}
// do your stuff here
}
Donc, même si ce n'est pas exactement le même problème que vous avez, la procédure est tout à fait la même chose.
Tout d'abord vous êtes abonné au contrôleur (dans mon cas, le contrôleur PostDispatchCheckout) après que vous modifiez le contrôleur dans votre Bootstrap.php
Pour vous assurer, qu'il modifie simplement une action spécifique que vous avez à utiliser la if-construction donc votre code se déclenche juste sur l'action désirée [dans mon cas le finishAction()].
J'espère que cela aide. Ce qui me demande cependant est pourquoi vous devez ajouter une action nouvelle à un contrôleur déjà existant. Je ne peux penser à aucune situation où quelque chose comme ça est plus pratique que de créer un nouveau contrôleur personnalisé complet.
Cordialement,
Max
Dans mon cas d'utilisation concrète que je devais mettre en œuvre une deuxième page d'inscription sur un itinéraire différent. Avec la même fonctionnalité de connexion du contrôleur de compte. ** Le problème **: Le contrôleur de compte Shopware transmet en interne toutes les demandes à un contrôleur de registre dans certains cas (par exemple, des informations d'identification erronées). Je suis au courant de la façon de poster/pré-expédier pour étendre la fonctionnalité des contrôleurs, mais dans mon cas, ce n'était pas possible. – Scribdarock