zoukankan      html  css  js  c++  java
  • Laravel事件Event

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

    1 php artisan make:event 事件名

    示例:

    1 php artisan make:event MyEvent

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?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数组来保存事件和监听者的映射关系。

    1
    2
    3
    4
    5
    6
    protected $listen = [
        'AppEventsMyEvent' => [
            'AppListenersMyListener1',
            'AppListenersMyListener2'
        ]
    ];

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

    1 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对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?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());
        }
    }

      

  • 相关阅读:
    分解质因数
    大素数测试和分解质因数
    快速幂
    欧拉函数
    素数
    gcd,lcm,ext_gcd,inv
    凸包问题 poj 2187
    map的 简单用法
    判断线段是否在园内
    2-sat 问题
  • 原文地址:https://www.cnblogs.com/wuyuxin/p/7039665.html
Copyright © 2011-2022 走看看