marek-mikula / laravel-console-events
Laravel控制台事件包
dev-master
2020-09-03 20:32 UTC
Requires
- laravel/framework: ^6.2
Requires (Dev)
- nunomaduro/larastan: ^0.6.2
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)。请参阅许可文件获取更多信息。