我想在用户单击按钮时执行这些函数,但我想在后台异步执行$model->user->email ? $model->sendUserMail(): "";
,而其他函数将在单击发生时执行这是我的代码
if (isset($_POST['create_send'])) {
if ($model->save()) {
$model->order_id = strtotime(date("Y-m-d H:i:s")) + '' + $model->id;
// send mail
$model->sendMail();
//send sms
$messages = $model->sendSMSMessage($model);
// create booking history
$model->createBookingHistory($model , $messages);
$model->user->email ? $model->sendUserMail(): "";
if($model->booking_stage != 'inprogress'){
$this->sendPushToSeller($model);
}
$model->update();
$this->redirect(array('index', 'id' => $model->id));
}
}
在标准PHP中没有类似异步任务的东西。您可以安装pthreads,或者必须使用某种Queue。对于Queue,它是这样工作的:
- 创建Mail-Send-Job
- 将该作业推送到队列中(例如数据库)
- 第三方程序(例如cronjob)必须轮询队列并执行任务(发送邮件),如果有一些
或者像@Alan Machado说的,使用AJAX。因此,您的页面可以加载,并且按钮向发送邮件的服务器发送AJAX请求。
您将其标记为yii,因此也许可以考虑RESTful API扩展,并研究AJAX和CRUD。这取决于你想走多远。但是我觉得使用yii的RESTful API是AJAX的最佳方式。