zoukankan      html  css  js  c++  java
  • Laravel5.1 事件--Event

    Event顾名思义就是事件的意思,在实际开发中 当用户做了某些动作或操作的时候 我们需要监听这些事件来做相应的处理。

    比如说用户注册一个账户我们需要往用户的邮箱中发验证信息这种操作。

    我们可以通过artisan命令来生成一个event和一个listener:

    php artisan make:event  CustomEvent
    php artisan make:listener  CustomListener

    但是有一个更加便利的方法,首先来到这个文件下:app/Providers/EventServiceProvider.php

    观察这个数组:

        protected $listen = [
            'AppEventsSomeEvent' => [
                'AppListenersEventListener',
            ],
        ];

    我们可以在这个数组中写我们想要生成的Event和Listener,一个Event可以对应多个Listener,下面来写一个例子:

        protected $listen = [
            'AppEventsUserSignUp' => [
                'AppListenersSendEmail',
                'AppListenersSaveUser',
            ],
        ];

    编辑完我们想要的事件和监听者后,使用artisan命令来生成他们:

    php artisan event:generate

    生成的Evnet在app/Event中 而Listener在app/Listener中

    触发事件

    进入到我们刚刚创建的Event中:

    class UserSignUp extends Event
    {
        use SerializesModels;
    
        public $user;
        /**
         * Create a new event instance.
         *
         * @return void
         */
        public function __construct(User $user)
        {
            // 可以在构造方法中声明要传入的数据 这里以User为例
            $this->user = $user;
        }
    
        /**
         * Get the channels the event should be broadcast on.
         *
         * @return array
         */
        public function broadcastOn()
        {
            return [];
        }

    然后进入到Listener中写处理的逻辑:

    class SendEmail
    {
        protected $mail;
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct(Mail $mail)
        {
            // 可以在这里依赖注入你需要的功能 这里以Email为例
            $this->mail = $mail;
        }
    
        /**
         * Handle the event.
         *
         * @param  UserSignUp  $event
         * @return void
         */
        public function handle(UserSignUp $event)
        {
            // 在这里完成要操作的业务逻辑,简单测试一下
            dump('send Email to ' . $event->user->name);
        }
    }

    现在只差触发这个事件了,触发事件可以使用全局帮助函数:

    Route::get('/', function () {
        $user = AppUser::findOrFail(0);
        // 这样就触发了一条Event
        event(new AppEventsUserSignUp($user));
    });
  • 相关阅读:
    Ubuntu速配指南之热门设置
    最高境地的Linux桌面
    菜鸟在Linux零碎中安置Oracle 11G
    Ubuntu 7.10疾速设置指南
    excel的单元格怎么实现下拉菜单?
    Delphi 与 DirectX 之 DelphiX(16): DXImageList1.Items.Find();
    Delphi 与 DirectX 之 DelphiX(19): 绘图表面(TDirectDrawSurface)如何加载图片
    Delphi 与 DirectX 之 DelphiX(18): TDXDraw 中描绘图片的命令
    Delphi 与 DirectX 之 DelphiX(17): TPictureCollectionItem.PatternWidth、PatternHeight
    Delphi 与 DirectX 之 DelphiX(23): TDirectDrawSurface.Blur;
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/6746682.html
Copyright © 2011-2022 走看看