1

我认为这是一个非常简单的问题,但考虑到我的编程水平,这对我来说并不容易。

我想知道在某些事件发生后是否有停止或不触发观察者的方法,这是因为我正在做的观察者处于无限循环中,我想阻止它执行该循环。

我希望我的问题足够清楚。

谢谢

更新: 一个例子可能是:观察者在事件中触发:core_config_data_save_after,当这个观察者启动时,你想更新 core_config_data 表中的值,但是当你保存它时,观察者再次启动并且有循环

4

2 回答 2

8

一种可能的解决方案是使用注册表并设置一个标志 - 如果在任何未来命中设置了注册表标志,您只需从观察者返回。

IE

public function myObserver(Varien_Event_Observer $observer)
{
    if (Mage::registry('my_observer_has_run')) {
        return $this;
    }

    .... Your Code Here ....

    Mage::register('my_observer_has_run', true);
}
于 2012-06-03T22:21:42.377 回答
5

您应该能够找到您想要并设置的观察者<type>disabled</type>

<frontend>
<events>
        <controller_action_predispatch>
            <observers>
                <log>
                    <class>log/visitor</class>
                    <method>initByRequest</method>
                </log>
            </observers>
        </controller_action_predispatch>
        .... other events
    </events>

本地修改 XML 以禁用上面找到的观察者:

<frontend>
    <events>
        <controller_action_predispatch>
            <observers><log><type>disabled</type></log></observers>
        </controller_action_predispatch>
    </events>
</frontend>

代码和更多细节:

于 2012-05-31T22:38:21.857 回答