在Laravel 5

时间:2015-05-26 18:27:06

标签: php laravel queue laravel-5

我正在尝试在返回HTTP响应后运行代码。我知道Laravel 5支持queues,但我仍然觉得它们令人困惑。我试图在用户注册后运行代码,需要用户的密码和用户名。 This answer似乎很有趣,但不能直接适用于Laravel。

  • 如何在队列中创建作业?
  • 如何将数据传递给新作业?

我知道这听起来很懒,但我真的不明白文档。

3 个答案:

答案 0 :(得分:10)

首先,设置队列需要选择您将使用的驱动程序。因为它是最快的运行方式,所以我将解释如何开始使用database驱动程序,因为它不需要在服务器上安装任何其他服务(因为它& #39;例如beanstalkd的情况)。以下是如何进行此设置:

1。QUEUE_DRIVER文件中设置.env

QUEUE_DRIVER=database

2. 运行此命令以生成jobs表的迁移文件,该文件将用于存储作业信息:

php artisan queue:table

3。现在运行迁移以创建表格:

php artisan migrate

创建了一个jobs表,用于在队列中推送作业时存储数据。

您可以将命令和clojures推送到队列中。为简洁起见,我将展示如何将闭包推入队列的示例:

$username = Request::input('username');
$password = Request::input('password');

// Do your registration stuff

// Push a job onto the queue
\Queue::push(function($job) use ($username, $password)
{
    // Do the stuff you need here with $username and $password

    // Delete the job from the queue
    $job->delete();
});

完成此工作的最后一步是运行队列侦听器。除非队列侦听器正在运行,否则不会自动处理作业。所以运行这个命令:

php artisan queue:listen

您可以采取进一步的步骤,例如设置Supervisor以监视并重新启动队列侦听器,但这应该足以让您入门。

答案 1 :(得分:1)

通常我们会像这样传递队列中的数据 -

在我们编写的控制器上 -

$this->dispatch(new videoToAudioConvert($video_id))

在工作部分你必须这样写 -

protected $video_id

public function __contructor($video_id){
  $this->video_id = $video_id
}

public function handle(){
  $this->video_id
}

您可以更多地了解如何在队列中创建作业以及如何从here传递变量。

答案 2 :(得分:0)

要存储在作业表中的需求数据是什么 我用它来发送带队列的电子邮件,我会安排它 我做了前3个步骤。  在.env文件中设置QUEUE_DRIVER:

QUEUE_DRIVER =数据库 2.运行此命令以生成jobs表的迁移文件,该文件将用于存储作业信息:

php artisan queue:table 3.现在运行迁移以创建表:

php artisan migrate 创建了一个作业表,用于在作业被推入队列时存储数据。