koalabs/evento

为您的 Laravel 应用程序提供简单的事件管理

1.0.2 2014-10-09 22:50 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:08:02 UTC


README

为您的 Laravel 应用程序提供简单的事件管理。这只是我们管理事件的一种方式。请谨慎使用。

注意:大部分代码灵感来源于 Jeffrey Way 的优秀 Laracasts 系列.

安装

您已经知道这一步了。

在您的应用程序根目录中,打开 composer.json 文件,并将包添加到 require 部分,使其看起来像这样

"require": {
    "koalabs/evento": "1.*"
},

打开命令行,并在应用程序根目录下运行以下 Composer 更新命令

php composer.phar update

现在让我们添加 Evento 服务提供者。打开 app/config/app.php 文件,并在 providers 数组中添加以下行

'Koalabs\Evento\EventoServiceProvider'

可选地,您可能还想添加 Facade 以获得美观的 Laravel 语义。在同一个应用程序配置文件中的 aliases 数组中添加

'Evento' => 'Koalabs\Evento\Facades\Evento'

用法

我想象自己直接在控制器中使用它。与存储库模式或模型一起使用也是有效的。

现在,假设您正在创建一个用于管理播客目录的应用程序。您将有一个 PodcastsController,其中包含所有常用的 CRUD 方法。为了简单起见,让我们只看看 store 方法。它可能看起来像这样

/**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
public function store()
{
    $input = Input::only('title', 'subtitle', 'author');

    $podcast = Podcast::create($input);

    Evento::fire(new PodcastAdded($podcast));
}

现在,您可能想创建一个文件夹来保存所有事件。我会称这个文件夹为 EventsPodcastAdded 类是关于在该文件夹中命名事件的一个示例。

监听事件

在引发事件后,您接下来将想要监听它们。为此,Evento 为您提供了一个便捷的类:EventListener。要使用它,您只需扩展它即可

use Koalabs\Evento\EventListener;
use Podcasts\Events\PodcastAdded;

class EmailNotifier extends EventListener {

  public function whenPodcastAdded(PodcastAdded $podcast)
  {
    // Do some stuff here
  }

}

需要注意的是命名规范:处理每个事件的每个方法都必须以单词 when 开头

一个小技巧

您可以使用自己的服务提供者来自动化大部分 Event 监听。尝试这样做(也许在一个 Listeners 文件夹中或其他地方)

use Illuminate\Support\ServiceProvider;

class ListenerServiceProvider extends ServiceProvider {

  /**
   * Register the service provider
   * 
   * @return void
   */
  public function register()
  {
    $listeners = $this->app['config']->get('evento::listeners');

    foreach ($listeners as $listener)
    {
      $this->app['events']->listen('Habitat.*', $listener);
    }
  }

}

哦,别忘了导出配置文件。

php artisan config:publish koalabs/evento