事件:其实就是监听者模式一种实现。
如果需要使用事件,必须要有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(); } }