1. 程式人生 > 其它 >[譯]Laravel 5.0 之事件自動生成

[譯]Laravel 5.0 之事件自動生成

本文譯自 Matt Stauffer 的系列文章.


建立一個事件及其處理程式,再把兩者關聯起來,或者建立一個命令及其處理程式,再把兩者關聯起來。有時候這看起來需要大量的工作。因此我經常期望能有一個工作流可以把所有這些工作整合在一起來處理。

用來建立事件和命令的 Artisan 命令是一個很好的開始,它能同時建立命令或事件的實體並且同時生成它們的處理程式(可選的)。但編寫命令和處理程式依然需要花費個把小時的時間,然後還得再花另外的 15 分鐘來除錯它們。或許花了大量的時間之後才發現問題其實只是因為你沒有把它們繫結起來……

輸入 event:generate

好在,我們的緊張等待終於結束了。在 Laravel 5 中,你可以在 EventServiceProvider

中繫結(不存在的)事件和處理程式,只要執行 php artisan event:generate, Artisan 就會自動生成全部檔案,包括事件和對應的處理程式。

如何實現

先看一下事件和處理程式的目錄:

app/
    Events/
        Event.php
    Handlers/
        Events/

1) 開啟 app/providers/EventServiceProvider.php, 找到 $listen 屬性,通常情況下我們就在這裡進行事件繫結,按照下面的格式新增一條繫結:

protected $listen = [
    DidSomethingEvent::class => [
        RespondOneWay::class,
        RespondAnotherWay::class
    ]
];

2) 執行 php artisan event:generate

3) 搞定。

檢查一下:

app/
    Events/
        Event.php
        DidSomethingEvent.php
    Handlers/
        Events/
            RespondOneWay.php
            RespondAnotherWay.php

事件和處理程式已經自動建立並且做好繫結,直接可用!如果開啟程式碼,你可以看到它們甚至還做了型別約束:

namespace AppHandlersEvents;
...
class RespondOneWay {
    ...
    public function handle(DidSomethingEvent $event)
    {
    }
}

寫在最後

太棒了!就這麼簡單!現在你就可以抽象地設計你的事件系統了——你可以在不用編寫任何命令或者處理程式的情況下規劃整個事件系統。當你設計完成後,只要執行一條簡單的命令,就能生成你規劃的所有事件和處理程式。