【发布时间】:2015-08-08 13:50:29
【问题描述】:
我在返回 HTTP 响应后尝试运行代码。我知道 Laravel 5 支持 queues,但我仍然觉得它们令人困惑。我正在尝试在用户注册后运行代码,这需要用户的密码和用户名。 This answer 看起来很有趣,但并不直接适用于 Laravel。
- 如何在队列中创建作业?
- 如何将数据传递给新作业?
我知道这听起来很懒惰,但我真的不懂文档。
【问题讨论】:
标签: php laravel queue laravel-5
我在返回 HTTP 响应后尝试运行代码。我知道 Laravel 5 支持 queues,但我仍然觉得它们令人困惑。我正在尝试在用户注册后运行代码,这需要用户的密码和用户名。 This answer 看起来很有趣,但并不直接适用于 Laravel。
我知道这听起来很懒惰,但我真的不懂文档。
【问题讨论】:
标签: php laravel queue laravel-5
设置队列首先需要选择您将使用的驱动程序。因为它运行起来最快,所以我将解释如何从database 驱动程序开始,因为它不需要在服务器上安装任何其他服务(例如beanstalkd 就是这种情况)。设置方法如下:
1. 在您的.env 文件中设置QUEUE_DRIVER:
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 来监控并在队列侦听器崩溃时重新启动它,但这应该足以让您开始。
【讨论】:
Class 'App\Services\Queue' not found 失败。我尝试将use App\Services\Queue 添加到页面顶部,但这并没有解决问题。我错过了什么?
\Queue::push() 代替Queue::push(),或者在文件顶部添加use Queue;。
FatalErrorException in SerializableClosure.php(153) : eval()'d code line 86: Class 'App\Services\Auth' not found。这是否意味着该作业从未真正放入队列中?
Queue的问题一样。您在 App\Services 命名空间中。这意味着如果您使用Auth,它会自动假定该命名空间中的类并会尝试加载App\Services\Auth。那当然不是当然是不正确的,因为所有 Laravel 别名都在全局命名空间中。所以解决方案是一样的:你要么在文件顶部添加use Auth;,要么像\Auth那样在前面加上一个反斜杠。您可以在PHP Documentation 中阅读有关命名空间如何工作的更多信息。
php artisan queue:listen 命令在 Laravel 5.4 中给出 InvalidArgumentException: The "force" option doesn't exist
一般我们这样在队列上传递数据-
在我们编写的控制器上 -
$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 传递变量。
【讨论】:
作业表中存储的需求数据是什么 我用它来发送带有队列的电子邮件,我会安排它 我做了前三个步骤。 在 .env 文件中设置 QUEUE_DRIVER:
QUEUE_DRIVER=数据库 2. 运行此命令生成作业表的迁移文件,该文件将用于存储作业信息:
php 工匠队列:表 3. 现在运行迁移以创建表:
php 工匠迁移 创建了一个作业表,该表将在将作业推送到队列时存储数据。
【讨论】: