如何使函数在laravel中后台运行

我正在用Laravel 5.0开发一个网站,并托管在Windows Server 2012中

我遇到了一个问题,我正在从另一个函数a调用控制器中的函数B,我希望调用另一个函数B的函数a不要等待函数B的完成。而函数B则在后台独立完成表单用户终止页面和函数A的返回

我对此进行了搜索,发现这可以通过windows中类似cron的作业、pcntl_fork()和laravel中的队列功能来实现。这一切我都是初学者

请帮忙!提前谢谢

正如文件所述http://laravel.com/docs/5.1/queues,首先您需要设置驱动程序-我会在开始时选择数据库:

php artisan队列:表
php artisan迁移

然后创建要添加到队列中的作业

<?php
名称空间App\Jobs;
使用App\User;
使用App\Jobs\Job;
使用Illumb\Contracts\Mail\Mailer;
使用照明\队列\序列化模型;
使用Illumb\Queue\InteracticsWithQueue;
使用照明\合同\总线\自处理;
使用Illumb\Contracts\Queue\ShouldQueue;
类SendEmail扩展作业实现自我处理,ShouldQueue
{
使用InteracticsWithQueue,序列化模型;
受保护的$用户;
公共函数构造(用户$User)
{
$this->user=$user;
}
公共函数句柄(Mailer$Mailer)
{
$mailer->send('emails.hello',['user'=>$this->user],函数($m){
//
});
}
}

然后在控制器中分派作业

<?php
名称空间App\Http\Controllers;
使用App\User;
使用\Http\Request;
使用App\Jobs\sendEmlerateMail;
使用App\Http\Controllers\Controller;
类UserController扩展控制器
{
/**
*向给定用户发送提醒电子邮件。
*
*@param Request$Request
*@param int$id
*@返回响应
*/
公共函数sendEmlerateMail(请求$Request,$id)
{
$user=user::findOrFail($id);
$sendmailjob=新的sendmail($user);
//或者如果您想要一个特定的队列
$sendmailjob=(新的sendmail($user))->onQueue('emails');
//或者如果你想推迟的话
$sendEmailJob=(新建SendEmail($user))->延迟(30);//秒
$this->分派($sendmailjob);
}
}

为此,您需要运行队列侦听器:

php artisan队列:侦听

答案是什么

发表评论