[php] Magento - customer_save_after는 항상 두 번 해고되었습니다.


Answers

나는 이것에 또한 달려 들고 각 방법을 위해 관찰자에있는 더미 추적을하고 적어도 두 번 발사 한 이유를 말할 수있다 (다른 사람이 있을지도 모른다) :

새 사용자가 계정을 만들면 양식이 제출 될 때 createPostAction ()이 실행됩니다. 이 조치는 고객에게 save() 를 수행합니다.

그런 다음 고객이 생성 된 후 setCustomerAsLoggedIn ()이 createPostAction ()에 의해 호출됩니다. 그러면 setCustomer ()가 호출됩니다.이 코드는 다음과 같습니다.

 if ((!$customer->isConfirmationRequired()) && $customer->getConfirmation()) {
    $customer->setConfirmation(null)->save(); // here is the second save
    $customer->setIsJustConfirmed(true);
 }

저장 이벤트를 디스패치하는 두 개의 save ()입니다. 나는 Magento 1.5의 계정 생성에 대해서만 확실히 알고 있습니다. 관리자 영역에서 사용자를 만들 때 또는 사용자가 정보를 편집 할 때 두 번 실행되면 의심 스럽지만 확실하지는 않습니다.

이게 도움이 되길 바란다!

Question

나는 magento에서 customer_save_after 이벤트를 사용하고 있으며, 모두 1 개의 성가신 것만 제외하면 잘 작동합니다. 항상 두 번 해고됩니다.

이 모듈을 다시 쓰는 다른 모듈은 없으며이 문제에 대한 다른 이유도 찾을 수 없습니다. 이 시간에 모든 이벤트가 해고되면이 이벤트가 확실히 두 번 해고됩니다.

누구나 설명 할 수 있겠 니?

나는 이것을 복제하고 그 결과를 복제하는 것이 비효율적이라는 웹 서비스를 만들고있다.




정적 var 사용 :

private static $_handleCustomerFirstSearchCounter = 1;

public function Savest($observer) {
    if (self::$_handleCustomerFirstSearchCounter > 1) {
        return $this;
    }

    $customerData = Mage::getSingleton('customer/session')->getCustomer();
    $model = Mage::getModel('customerst/customerst')
        ->setQueryText(Mage::app()->getRequest()->getParam('q'))
        ->setCustomerId($customerData->getId())
        ->setCustomerName($customerData->getName())
        ->save();

    self::$_handleCustomerFirstSearchCounter++;
}