事件:其实就是监听者模式一种实现。
如果需要使用事件,必须要有1个事件类和一个监听类,一个事件可以被多个类监听。一个监听类可以关注(收听)多个事件。
事件类:其实就是一个动作,这个动作里面主要带有事件的数据(描述事件)。
监听类:针对传递过来的事件进行处理,取出事件里面数据。
创建事件:
1、在 EventServiceProvider $listen 里面设置好事件对应的监听类。
2、然后在控制台创建事件命令:
php artisan event:generate
PHP 会自动创建文件夹 Events 和 Listeners ,并根据 $listen 的设置,创建事件类和监听类。
触发事件:使用 event(new XxxEvent());
与队列的联系:触发事件的时候,和同步队列委派的时候一样,都是立即执行。这方面他们比较像。
队列:需要执行的程序排队执行。
针对耗时比较长的程序操作,或者需要异步执行的操作。
创建Job:每个操作程序类叫做一个Job。
消费队列:
php artisan queue:work
控制台命令:命令行执行PHP代码
创建命令:
php artisan make:command SendEmails
<?php
namespace App\Console\Commands;
use App\User;
use App\DripEmailer;
use Illuminate\Console\Command;
class SendEmails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'email:send {user}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send drip e-mails to a user';
/**
* The drip e-mail service.
*
* @var DripEmailer
*/
protected $drip;
/**
* Create a new command instance.
*
* @param DripEmailer $drip
* @return void
*/
public function __construct(DripEmailer $drip)
{
parent::__construct();
$this->drip = $drip;
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->drip->send(User::find($this->argument('user')));
}
}任务调度:定时调用控制台命令或者执行程序
只需开启一个 crontab 即可:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
可在 app/Console/Kernel.php 里面配置每个命令的执行时间:
call(function () {
DB::table('recent_users')->delete();
})->daily();
}
}