使用Laravel事件保持代码清洁

EnevtProvider

在许多状况下,当咱们的应用程序变得更大,而且须要处理愈来愈多的任务时,咱们的控制器,演示者或服务的大小能够快速增长,而且很容易变得难以处理,没法测试和缓慢。php

单一职责

从新组织咱们的逻辑,并将不一样类型的任务放到专门的类中,可能会很是有用,而且这是推荐的“最佳”实践。laravel

为何?处理更多但更小的碎片比处理巨大巨石中的全部物件要容易得多。最重要的是,你的应用程序变得更加可测试,你不会破坏SRP,而且最终你能够轻松得到更干净更漂亮的代码。app

开始使用事件

其中一项有用的技巧是Laravel的 Event 服务。 首先,在各类状况下,经过将任务移至事件类,可完全清理控制器。 使用事件的另外一个缘由是队列系统,它容许你的应用程序异步完成做业,这能够极大地加速你的应用程序。异步

事件系统有两个重要部分。 事件自己和侦听器(Listener)能够绑定到特定的事件。 事件类负责序列化传入数据,并将其传递给侦听器,旨在在事件触发后处理逻辑的内容。ide

实际中使用事件 (Event)

触发事件从未如此简单,咱们所要作的就是调用 event() helper,并将事件的类做为参数。如: event(UserRegistered::class)post

经过一个常见的例子,让咱们看看它在现实生活中的做用。在咱们的应用程序中,咱们但愿向咱们的新用户发送欢迎电子邮件。测试

首先,咱们须要在 EventServiceProvider 中绑定事件和侦听器。若是咱们想要处理特定事件的不一样逻辑,咱们能够将更多监听器附加到事件上。this

// app/Providers/EventServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        'App\Events\UserRegistered' => [
            'App\Listeners\SendWelcomeEmail',
        ],
    ];
}

当绑定准备就绪时,咱们可使用 php artisan event:generate 生成一对 事件-侦听器,或者咱们可使用 artisan make 命令单首创建它们。spa

咱们的事件没有其余责任,只是将用户指定为公共财产,可能会传递给侦听器。code

// app/Events/UserRegistered.php

<?php

namespace App\Events;

use App\User;

class UserRegistered
{
    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

咱们的侦听器Listener是重要的一部分。 它实现了 ShouldQueue 接口,这意味着这个事件将被推送到队列堆栈。 在 handle 方法中,咱们正在实现将电子邮件发送给给定用户的逻辑。

// app/Listeners/SendWelcomeEmail.php

<?php

namespace App\Listeners;

use App\Mail\WelcomeEmail;
use App\Events\User\Created;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle(Created $event)
    {
         Mail::to($event->user)->send(new WelcomeEmail($event->user));
    }
}

重组咱们的逻辑可能很是有用,尤为是当你须要处理大量任务时。事件和侦听器可能对你有很大的帮助。你能够在这里找到官方的Laravel事件文档

原文地址: https://phpcasts.org/posts/keep-the-code-clean-with-laravel-events

相关文章
相关标签/搜索