shooka/laravel-modelevents

让服务提供者处理您的模型事件

v0.3.0 2016-09-22 18:25 UTC

README

Build Status Coverage Status Total Downloads Latest Stable Version Latest Unstable Version License

你是否曾想过将 eloquent 模型事件放在哪里?现在应用监听器到您的模型上比以往任何时候都要简单。

安装

通过运行以下命令将此包添加到您的 Laravel 项目中:

composer require shooka/laravel-modelevents 0.3.*

为了发布必要的文件,将 ServiceProvider 添加到 config/app.php 中的提供者数组中

Shooka\ModelEvents\ServiceProvider::class,

接下来,运行以下命令来发布文件:

php artisan vendor:publish --provider="Shooka\ModelEvents\ServiceProvider"

这会发布两个文件

  • 一个包含一个示例类 ModelEvents/UserEvent.php 的文件,该类展示了未来的 ModelEvent 应该是什么样子。
  • 一个 Providers/ModelEventServiceProvider.php 文件,其中包含一个空的监听器数组,将实际的 Eloquent 模型事件映射到 ModelEvent 类。

由于新的 ModelEventServiceProvider 已被发布,您可以将其添加到提供者数组中

App\Providers\ModelEventServiceProvider::class,

不要忘记从数组中 移除 原来的一个

Shooka\ModelEvents\ServiceProvider::class,

使用方法

此包利用了 Laravel 的一些出色功能,这意味着它在新旧 Laravel 项目中都很容易使用。

默认支持的模型事件包括标准 Laravel 模型事件:creatingcreatedupdatingupdatedsavingsaveddeletingdeletedrestoringrestored

自定义事件

如果您想定义任何自定义事件,它们应该添加到 $observables 数组中

class Product extends Model
{
    protected $observables = [
        'sold',
        'shipped',
        'returned',
        ...
    ];
}

这些事件现在在 ModelEvent 中是可观察的

class ProductEvent extends ModelEvent
{
    public function returned($product) {
        // Increase stock count
    }
}

激活监听器

要为 eloquent 模型添加监听器,只需在 ModelEventServiceProvider 中将模型映射到 ModelEvent

protected $listeners = [
    \App\Product::class => \App\ModelEvents\ProductEvent::class,
];

ModelEvent 可以放置在任何位置,但在这个例子中,它被放在了 安装 章节中通过命令发布的 ModelEvents 文件夹中。