• laravel 事件机制 实践总结


    laravel 事件机制 实践总结

    观察者模式
    • 在EventServiceProvider的linsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器,
    protected $listen = [
        'AppEventsEvent' => [
            'AppListenersEventListener',
        ],
        'AppEventsSendPhoneCodeEvent' => [
            'AppListenersSendPhoneCodeListener',
        ],
    ];
    
    • 生成监听和事件文件 php artisan event:generate
    • 编辑Event类
      • 可以添加属性来传递数据,添加方法来传递回调
    • 编辑Listener类
      • 在handle方法中编辑监听逻辑
    • 触发事件 调用全局函数event(),传入事件对象;
      • event(new SendPhoneCodeEvent($data));
    发布订阅模式
    • 编辑订阅类 ,实质就是一个调度中心
    <?php
    /**
     * Created by PhpStorm.
     * User: liutengfei
     * Date: 2018/12/25
     * Time: 18:45
     */
    namespace AppListeners;
    use AppEventsSomeEvent;
    use AppEventsTestEvent;
    
    class TaskToLogListener
    {
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        public function someEventTask(SomeEvent $event)
        {
            echo 'uuuu'."
    " ;
        }
    
        public function testEventTask(TestEvent $event)
        {
            echo 'iiioo'."
    ";
        }
    
    	//这里是订阅中心,这里既可以调用自己,也可以分发到其他监听者
        public function subscribe($events)
        {
           $events->listen('AppEventsSomeEvent','AppListenersTaskToLogListener@someEventTask');
    
    
            $events->listen('AppEventsTestEvent','AppListenersTest2Listener@Handel');
            
     $events->listen('AppEventsTestEvent','AppListenersTest1Event@Handel');
    
        }
    }
    
    • 在EventServiceProvider添加属性$subscribe
      • protected $subscribe = [TaskToLogListener::class];
    • 触发事件
    Event::fire(new TaskAdded($task));
    Event::fire(new TaskDeled($task));
    
  • 相关阅读:
    jQuery.extend
    Topshelf便捷创建Windows服务
    cron表达式
    定时调度框架:Quartz.net
    sqlserver自定义函数
    HTML dom document 对象
    正则表达式之 数据验证 与 文本替换
    JavaScript 之 DOM 与 BOM
    CSS 之pseudo-classes 与pseudo-element的异同
    CSS中的 position与Grid Layout
  • 原文地址:https://www.cnblogs.com/frankltf/p/10178044.html
Copyright © 2020-2023  润新知