4

app/code/core/Customer/etc/config.xmlMagentoがアドレスを保存する前後のオブザーバーを登録します。

<events>
    <customer_address_save_before>
        <observers>
            <customer_address_before_save_viv_observer>
                <class>customer/observer</class>
                <method>beforeAddressSave</method>
            </customer_address_before_save_viv_observer>
        </observers>
    </customer_address_save_before>
    <customer_address_save_after>
        <observers>
            <customer_addres_after_save_viv_observer>
                <class>customer/observer</class>
                <method>afterAddressSave</method>
            </customer_addres_after_save_viv_observer>
        </observers>
    </customer_address_save_after>
</events>

…しかし、Magentoが実際にこれらのイベントをどこにでもディスパッチしているという証拠は見つかりません。

$ grep -RF 'dispatchEvent(' . | grep -F customer_addres
./app/code/core/Mage/Customer/Model/Address/Abstract.php:        Mage::dispatchEvent('customer_address_format', array('type' => $formatType, 'address' => $this));

私が理解しMage::dispatchEvent(…)ている限り、Magentoがイベントを発生させる唯一の方法です。これらのイベントは実際に発生しますか?(アドレス節約時間で発生するいくつかのイベントを実際に使用できるので、そう願っています。)

4

1 に答える 1

13

はい、ディスパッチしますが、magentoが動的にこれを行うため、ディスパッチされる場所を見つけるのが難しいイベントもあります。これは、保存中のほぼすべてのコアモデルで発生します。Magentoは、次のようなイベントをディスパッチします。

Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());

そのため、grepはこのイベントがディスパッチされる場所を見つけることができません。

たとえば、モデル「Mage_Customer_Model_Address」は$_eventPrefix = 'customer_address'、イベントがディスパッチされる_beforeSave()および_afterSave()メソッドのMage_Core_Model_Abstractを設定したクラス「Mage_Customer_Model_Address_Abstract」を拡張します。

于 2012-12-28T23:27:20.160 に答える