Mam zdarzenia, które chcę wykonać, gdy klient zarejestruje się lub zapisze swoje dane. W tym celu używam dwóch zdarzeń: customer_register_success i customer_save_after. Problem, który mam, polega na tym, że kończę zadanie dwa razy, ponieważ klient_save_after jest zawsze wywoływany w tym samym wykonaniu co customer_register_success
.
Próbowałem wykryć, czy klient jest nowy, sprawdzając oryginalne dane i wywołując isObjectNew
, ale oba zwracają dane sugerujące, że obiekt w rzeczywistości nie jest nowy. Jak mogę sprawdzić, czy klient rejestruje się w zdarzeniu customer_save_after, po czym nie ustawia czegoś w rejestrze customer_register_success
zdarzenia?
źródło
before
zdarzenie maisObjectNew
dane, ponieważ dane nie zostały jeszcze zapisane. Jeśli chodzi o brud, wydaje się, że byłyby bardziej eleganckie sposoby, ale z pewnością nie jest to hack$customer->save(); $this->_dispatchRegisterSuccess($customer);
niestety tutaj klient jest zapisywany przed wywołaniem zdarzenia rejestracyjnego, więc metoda obserwatora i tak by nie działała :(Innym podejściem jest sprawdzenie, który kontroler i akcja wywołały zdarzenie.
W obserwatorze możesz uzyskać nazwę modułu, kontrolera i akcji.
A później sprawdź swoją metodę, która wysyła zdarzenie.
W standardowej instalacji Magento, podczas tworzenia użytkownika z obszaru użytkownika wartość $ myURI byłaby
customer_account_createpost
.źródło