Registrierfunktion ersetzen

Hallo Community,

ich bin derzeit beschäftigt ein Plugin zu schreiben, welches den kompletten Regestrierungsprozess ersetzen soll.
Ich will quasi nur die POST Daten der Registrierung abfangen. Bis jetzt versuche ich es über:

public function install()
{
	$this->subscribeEvent(
            'Shopware_Controllers_Frontend_Register.saveRegisterAction',
            'replaceRegister'
        );

	return true;
}

public function replaceRegister(Enlight_Event_EventArgs $args)
{
	//code

$args->getSubject()->forward("finishedRegistration","callRegister");

}

 

Wenn ich nun eine Regestrierung absende, wird aber immer noch die Standardfunktion aufgerufen, und nicht meine Funktion “replaceRegister”.
Was mach ich falsch? woher weiß ich genau wie das Event heißt, welches ich ersetzen will?

Grüße, schlueter550v

Hi, mein PHPStorm schlägt mir folgendes vor:

hilft das vielleicht weiter?

 

VG

Hallo,

ja es hat mir schonmal geholfen, bei dem Wort Hook kam ne kleine Glühbirne zum Vorschein

$this->subscribeEvent(
            'Shopware_Controllers_Frontend_Register::saveRegisterAction::replace',
            'replaceRegister'
        );

damit ruft er zumindest schonmal meine Funktion auf. Nur leider leitet er mich nun nicht auf mein Template weiter, sonder auf die Startseite. Folgender Code greift nicht:

$args->getSubject()->forward("finishedRegistration","callRegister");

 

Hast du möglicherweise in dem Class Namen oder in dem Action Namen tippfehler?

Hallo,

ich habe es nochmal überprüft, vllt. überseh ich es andauernd. Hier mal was ich habe:
in der Bootstrap.php:

$args->getSubject()->forward("finishedRegistration","callRegister");

Dann in der Controllers/Frontend/callRegister.php

View()->loadTemplate('frontend/RegisterWithFile/finishedRegistration.tpl');
    }
?>

und abschließend in der Views/frontend/RegisterWithFile/finishedRegistration.tpl

{extends file="parent:frontend/index/index.tpl"}

{block name='frontend_index_content_main'}
	blabla
{/block}

überseh ich da andauernd etwas?

Wird dein Controller denn registriert oder klappt nur die Weiterleitung nicht?
Am besten rufst du mal /callRegister auf. Wenn der Controller registriert ist, solltest du auch irgendeine ausgabe bekommen (ggf. weiße Seite) oder du haust einen die(“Bla”); rein.

Ich habe den Fehler herausgefunden:

  1. Ich habe versäumt den Controller zu registrieren.
    dies in die install function gepackt:

    $this->registerController(‘frontend’, ‘callRegister’);

  2. Ich habe jetzt einen redirect statt forward benutzt:
     

    $args->getSubject()->redirect(
    array(
    ‘controller’ => ‘callRegister’,
    ‘action’ => ‘finishedRegistration’,
    )
    );

und zu letzt 3. Ich musste die Datei callRegister.php in CallRegister.php umbenennen. Wieso ich mit einem Großbuchstaben anfangen muss weiß ich nicht.

Zu 3. ich meine mal irgendwo darauf gestoßen zu sein: Da wandelt Shopware bei Event Listenern im Controller-Pfad die Datei und Verzeichnis Namen um, sodass die mit Großbuchstaben anfangen. Und dann wird die Datei Controller/Frontend/CallRegister.php nicht gefunden wenn diese callRegister.php heißt.