zoukankan      html  css  js  c++  java
  • 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 未本地化版本许可协议进行许可。

  • 相关阅读:
    【字符编码】Java编码格式探秘
    【集合框架】JDK1.8源码分析之Collections && Arrays(十)
    【面试】shuffle函数的实现
    关于Jquery中ajax方法data参数用法的总结
    关于BootStrap下图标的显示问题
    dajngo权限管理
    Django下TemplateDoesNotExist 异常的解决方法:
    ubuntu安装有道
    python manage.py shell之后的一些错误:
    fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
  • 原文地址:https://www.cnblogs.com/sweng/p/6358961.html
Copyright © 2011-2022 走看看