繁体   English   中英

暂停循环发送电子邮件

[英]Pause loop that is sending emails

我正在尝试通过一次从数据库10中获取电子邮件来将电子邮件发送到我的订户列表。 我希望能够暂停并继续通过控制器操作发送那些电子邮件。

Symfony中是否有任何方法(或者这可能是一个通用的PHP问题)来控制另一个动作的控制器动作? 像这样:

public function sendEmailAction() 
{
    // loop through recipients and send emails
}

public function pauseEmailAction()
{
    // pause the loop in sendEmail
}

public function resumeEmailAction() 
{
    // resume sendEmailAction from the point where 
    // pauseEmailAction has stopped it
}

我可能会缺少一些东西,但这足以满足您的需求。

public function firstAction()
{
    for (i=0; i < 100; i++) {
        $users = $this->giveMeTenUsers($i);
        $this->secondAction($users);
    }
}

public function secondAction(array $users)
{
    // do stuff like send the emails

    return;
}

firstAction调用secondAction ,将“停止”执行firstAction ,等待secondAction的结果。 secondAction命中时return; ,它结束了自己的执行,因此将程序发回到调用它的循环内的firstAction

那是你需要的吗? 还是我没有得到一个元素?

编辑:为什么不尝试设置布尔值来中断或不中断?

像这样:

public function mainAction() // firstAction
{
    for (i=0; i < 100; i++) {
        while ($this->isInterrupted()) {}
        $users = $this->giveMeTenUsers($i);
        // Do stuff
    }
}

public function interruptAction() // secondAction
{
    $this->setInterrupted(true);
}

public function releaseAction() // thirdAction
{
    $this->setInterrupted(false);
}

编辑2:顺便说一句,您不必使用动作,它可以与任何方法一起使用。

编辑3:添加您的课程

private $interrupted = false;

public function isInterrupted()
{
    return $this->interrupted;
}

public setInterrupted(bool $interrupted)
{
    $this->interrupted = $interrupted;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM