Magento - customer_save_after immer zweimal gefeuert
Ich bin mit der customer_save_after
event in magento, und alles ist in Ordnung, abgesehen von 1 ärgerliche Sache - es ist immer wieder feuerte zweimal.
Gibt es keine anderen Module umschreiben und ich finde keinen anderen Grund für dieses geschehen. Wenn ich mir durch all die Ereignisse gefeuert zu dieser Zeit und zu diesem Ereignis wird auf jeden Fall gefeuert zweimal.
Jemand erklären?
Schreibe ich einen web-Dienst, der Haken in diesem und dessen entpuppt sich ziemlich ineffizient zu duplizieren Dinge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe bemerkt, diese Doppel-save-Verhalten zu. Der Weg, um zu verhindern, dass Problem mit dem Beobachter ist, setzen Sie ein flag in der Anfrage, die überprüft werden können, z.B.
Lief ich in diese als gut und hast einen stack-trace in der Beobachter für jede Methode, und kann sagen, dass Sie mindestens EINEN Grund, warum es zweimal ausgelöst (es mag andere geben):
Wenn ein neuer Benutzer ein Konto erstellt, createPostAction() wird ausgeführt, wenn das Formular abgeschickt wird. Durch diese Aktion wird ein
save()
auf den Kunden über.DANN, wenn der Kunde angelegt wurde, setCustomerAsLoggedIn() aufgerufen wird, createPostAction(). Dies wiederum erfordert setCustomer () was hat dieses kleine Stückchen code:
Sind die zwei speichern()s die Versendung der save-Ereignis. Ich weiß nur, dass das für Sie sicher der Konto-Erstellung in Magento 1.5. Ich bezweifle, ob er gefeuert wird zweimal bei der Erstellung von Benutzern im Admin-Bereich, oder wenn ein Benutzer Bearbeiten Ihre Informationen... aber ich weiß es nicht sicher.
Ich hoffe, das hilft!
Vorsichtig sein mit Jonathans Lösung, 'customer_save_observer_executed, bleibt es in der Sitzung, so-Ereignis nicht ausgelöst wird, wieder in die browser-Sitzung. Also es ist generell eine schlechte Idee, weil es wird nicht zulassen, registrieren Sie zwei oder mehr Kunden in einer Reihe(tatsächlich, es wird, aber die Ereignisse werden nicht ausgelöst)
Schlage ich die folgende Lösung:
Habe ich eine static var:
Den Unterschied zwischen diesen 2 Ereignissen ist eine von Ihnen nicht bekommen können, Kunden-info, während der andere. Also die Lösung ist