• Laravel事件Event


    适用场景:记录文章浏览量

    php artisan make:event 事件名
    

    示例:

    php artisan make:event MyEvent
    

    Laravel目录appEvents已经生成MyEvent.php文件

    <?php
    
    namespace AppEvents;
    
    use AppEventsEvent;
    use IlluminateQueueSerializesModels;
    use IlluminateContractsBroadcastingShouldBroadcast;
    
    class MyEvent extends Event
    {
        use SerializesModels;
    
        /**
         * Create a new event instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Get the channels the event should be broadcast on.
         *
         * @return array
         */
        public function broadcastOn()
        {
            return [];
        }
    }
    

    事件必须有监听者,我们先在appProviders目录下找到EventServiceProvider.php文件,该文件内有一个Events-Listeners数组来保存事件和监听者的映射关系。

    protected $listen = [
    	'AppEventsMyEvent' => [
    		'AppListenersMyListener1',
    		'AppListenersMyListener2'
    	]
    ];
    

    这里,我们让一个事件有两个监听者,使用artisan控制台自动生成php文件

    php artisan event:generate
    

    LaravelappListeners目录下已经生成了MyListener1.php和MyListener2.php

    问题来了,我们怎么触发这个事件?

    这里借用我们上一篇博客说的Console,来测试这个事件,如果你对Console不熟,可以看http://www.cnblogs.com/sweng/p/6358919.html

    对Check类中修改handle()函数,使用Event::fire(new MyEvent())触发事件,实际上是传入一个Event对象

    <?php
    
    namespace AppConsoleCommands;
    
    use IlluminateConsoleCommand;
    
    //
    use IlluminateSupportFacadesEvent;
    use AppEventsMyEvent;
    
    class Check extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'check';
    
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Command description';
    
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
            parent::__construct();
        }
    
        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            //
    		echo 'checking...';
    		Event::fire(new MyEvent());
        }
    }
    

      

    本文为博主原创文章,转载请在明显位置注明出处: http://www.cnblogs.com/sweng

    本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。

  • 相关阅读:
    Docker基础技术-Linux Namespace
    基于 Kata Containers 与 iSulad 的云容器实践解析
    runc network
    cgroup--device systemd-cgls + devices.deny
    setcap capabilities cap_net_raw
    kata agent
    什么是路演
    穿行测试
    交易性金融资产与可供出售金融资产
    什么情况使用消极式函证
  • 原文地址:https://www.cnblogs.com/sweng/p/6358961.html
Copyright © 2020-2023  润新知