gpt4 book ai didi

php - 异步触发 Magento 事件观察器

转载 作者:可可西里 更新时间:2023-11-01 13:22:38 26 4
gpt4 key购买 nike

有什么方法可以使 Magento 中的事件观察器异步吗?我想在客户下订单后使用它在后台运行一些耗时的脚本,但我的理解是,当事件被分派(dispatch)时,观察者的代码会同步/立即执行。

最佳答案

如@user3438533 所述,您可以实现此目的的一种方法是在您的观察者触发时安排一个作业,该作业稍后可以由 cron 执行。这样做是安全的,因为将来在 cron_schedule 中以 pending 状态安排的作业不会被清除。

既然您提到了采购,那我们就拿它来举例吧。您将需要能够 create a simple extension为了付诸行动。 sales_order_place_after 用于在下订单后执行操作的常见事件,因此我们将使用它来触发 future 的自定义 cron 作业。

etc/config.xml

第 1 步。在 config/frontend/events 下设置事件观察器:

<sales_order_place_after>
<observers>
<scheduleExampleJob>
<class>My_Example_Model_Observer</class>
<method>scheduleExampleJob</method>
</scheduleExampleJob>
</observers>
</sales_order_place_after>

第 2 步。设置 cron 作业处理程序,它将监听在 config/crontab/jobs 下的观察器中创建的新自定义作业:

<my_example_job>
<!-- @see My_Example_Model_Observer::scheduleExampleJob -->
<run><model>My_Example_Model_Observer::runExampleJob</model></run>
</my_example_job>

模型/Observer.php

class My_Example_Model_Observer
{
/**
* Triggers my_example_job to get scheduled when it gets fired.
* @param Varien_Event_Observer $observer
* @return $this
*/
public function scheduleExampleJob(Varien_Event_Observer $observer)
{
// Calculate your needed datestamp to schedule the future job.
$scheduleAt = Mage::getModel('core/date')->timestamp('Y-m-d H:i:s', strtotime('30 minutes from now'));
Mage::getModel('cron/schedule')
->setJobCode('my_example_job') // Needs to match config/crontab/jobs node
->setStatus(Mage_Cron_Model_Schedule::STATUS_PENDING)
->setScheduledAt($scheduleAt)
->save();
}

/**
* Handler for my_example_job, executed from crontab.
* @param $schedule
* @return $this
*/
public function runExampleJob($schedule)
{
// Do your asynchronous work!

return $this;
}
}

关于php - 异步触发 Magento 事件观察器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com