marek-mikula/laravel-console-events

Laravel控制台事件包

dev-master 2020-09-03 20:32 UTC

This package is auto-updated.

Last update: 2024-09-29 05:42:51 UTC


README

这个包是做什么的?

此包允许您使用由控制台触发的事件。事件包括:

MarekMikula\LaravelConsoleEvents\Events\CommandErrorEvent 当命令抛出异常时触发此事件。

MarekMikula\LaravelConsoleEvents\Events\CommandExecutedEvent 在执行任何命令之前触发此事件。

MarekMikula\LaravelConsoleEvents\Events\CommandTerminatedEvent 在任何命令终止后触发此事件。

如何安装此包?

通过composer

composer require marek-mikula/laravel-console-events

如何使用此包?

创建监听器

使用Laravel的命令php artisan make:listener创建监听器,这些监听器将监听此包提供的事件。监听器将被创建在app/Listeners文件夹中。

监听器可能看起来像这样

<?php

namespace App\Listeners;

use MarekMikula\LaravelConsoleEvents\Events\CommandExecutedEvent;
use Illuminate\Support\Facades\Log;

class CommandExecutedListener
{
    /**
     * Handle the event.
     *
     * @param  CommandExecutedEvent  $event
     * @return void
     */
    public function handle(CommandExecutedEvent $event)
    {
        Log::info(sprintf('Command [%s] executed...',
            $event->getCommand()->getName()
        ));
    }
}
<?php

namespace App\Listeners;

use MarekMikula\LaravelConsoleEvents\Events\CommandErrorEvent;
use Illuminate\Support\Facades\Log;

class CommandErrorListener
{
    /**
     * Handle the event.
     *
     * @param  CommandErrorEvent  $event
     * @return void
     */
    public function handle(CommandErrorEvent $event)
    {
        Log::error(sprintf('Command [%s] threw an exception in file [%s] on line [%u]...',
            $event->getCommand()->getName(),
            $event->getError()->getFile(),
            $event->getError()->getLine()
        ));
    }
}
<?php

namespace App\Listeners;

use MarekMikula\LaravelConsoleEvents\Events\CommandTerminatedEvent;
use Illuminate\Support\Facades\Log;

class CommandTerminatedListener
{
    /**
     * Handle the event.
     *
     * @param  CommandTerminatedEvent  $event
     * @return void
     */
    public function handle(CommandTerminatedEvent $event)
    {
        Log::info(sprintf('Command [%s] terminated with exit code [%u]...',
            $event->getCommand()->getName(),
            $event->getExitCode()
        ));
    }
}

注册监听器

app\Providers\EventServiceProvider中注册创建的监听器。

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    \MarekMikula\LaravelConsoleEvents\Events\CommandExecutedEvent::class => [
        \App\Listeners\CommandExecutedListener::class,
    ],
    \MarekMikula\LaravelConsoleEvents\Events\CommandTerminatedEvent::class => [
        \App\Listeners\CommandTerminatedListener::class,
    ],
    \MarekMikula\LaravelConsoleEvents\Events\CommandErrorEvent::class => [
        \App\Listeners\CommandErrorListener::class,
    ],
];

结果

只需使用一个测试命令,在其handle方法中抛出异常,你应该会看到类似的结果。

[2020-08-18 19:34:55] local.INFO: Command [app:test] executed...  
[2020-08-18 19:34:55] local.ERROR: Command [app:test] threw an exception in file [...\app\Console\Commands\App\Test.php] on line [40]...  
[2020-08-18 19:34:55] local.INFO: Command [app:test] terminated with exit code [1]...  

许可

MIT许可(MIT)。请参阅许可文件获取更多信息。