模型事件
基础事件
-
User 模型加入代码
-
protected $dispatchesEvents = [ 'saving' => \App\Events\UserSaving::class, ];
-
-
创建事件
-
// artisan make:event UserSaving <?php namespace App\Events; use App\User; use Illuminate\Queue\SerializesModels; class UserSaving { use SerializesModels; public $user; /** * 创建一个新的事件实例 * * @param \App\User $user */ public function __construct(User $user) { $this->user = $user; } /** * 处理事件。 * * @param \App\Events\UserSaving $event * @return mixed */ public function handle(UserSaving $event) { if (stripos($event->user->name, 'paul') !== false) { return false; } } } // Model::save() public function save(array $options = []) { $query = $this->newQueryWithoutScopes(); // 如果 "saving" 事件返回 false ,我们将退出保存并返回 // false,表示保存失败。这为服务监听者提供了一个机会, // 当验证失败或者出现其它任何情况,都可以取消保存操作。 if ($this->fireModelEvent('saving') === false) { return false; } }
-
-
创建监听器
-
// php artisan make:listener UserSaving <?php namespace App\Listeners; use App\Events\UserSaving as UserSavingEvent; class UserSaving { /** * 处理事件。 * * @param \App\Events\UserSavingEvent $event * @return mixed */ public function handle(UserSavingEvent $event) { app('log')->info($event->user); } }
-
-
注册监听器
-
// EventServiceProvider::$listen <?php namespace App\Providers; use Illuminate\Support\Facades\Event; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * 应用的事件监听器。 * * @var array */ protected $listen = [ \App\Events\UserSaving::class => [ \App\Listeners\UserSaving::class, ], ]; // ... }
-
模型观察者
-
创建类
-
<?php namespace App\Observers; use App\User; class UserObserver { /** * 监听 User 创建事件。 * * @param \App\User $user * @return void */ public function created(User $user) { // } /** * 监听 User 删除事件。 * * @param \App\User $user * @return void */ public function deleting(User $user) { // } }
-
-
注册观察者
-
// 在服务提供者 AppServiceProvider 中的 boot() 方法里注册观察者。 /** * 运行所有应用服务。 * * @return void */ public function boot() { User::observe(UserObserver::class); }
-