tuupke/laravel-finalizer

一个简单的包,提供处理关闭连接后执行的辅助函数

1.0.4 2019-03-26 12:50 UTC

This package is auto-updated.

Last update: 2024-09-21 02:38:04 UTC


README

Laravel通过中间件实现的finalizers仍然与请求同步,因此会增加应用的响应时间。对于许多用例,例如日志记录,这并不理想。

通常来说,标准的Laravel实践建议在这些情况下使用工作。当这太过分时,可以使用此包。它通过PHP的register_shutdown_function提供了一个小的包装,以帮助处理这些用例。

安装

通过composer安装此包。

composer require "tuupke/laravel-finalizer"

然后打开config/app.php文件,将以下内容追加到providers数组中

Tuupke\Finalizer\FinalizerServiceProvider::class,

并将其添加到aliases数组中

'Finalizer' => Tuupke\Finalizer\FinalizerFacade::class,

使用

现在,您可以在应用中的某个位置调用:Finalizer::register($closure)),其中$closure是执行某些动作的闭包。可选地,您可以为第二个参数提供一个整数,这将成为优先级。优先级越低,执行越早。当注册了具有相同优先级的2个闭包时,先注册的闭包将先执行。

示例

以下是一个简单的示例,它将一些内容存储到文件中。请注意,在实际应用中不应使用此示例。当需要日志记录时,请使用Log外观。

Finalizer::register(function(){
    file_put_contents('/tmp/finalizer-test', "Second String", FILE_APPEND);
}, 2);

Finalizer::register(function(){
    file_put_contents('/tmp/finalizer-test', "First String\n", FILE_APPEND);
}, 1);

执行包含此代码块的请求后,/tmp/finalizer-test的内容为

First String
Second String

在非Laravel应用中使用

严格来说,此包也可以用于使用composer的非Laravel PHP应用。但是,这不建议使用,因为这违背了此包的目的。如果愿意,您仍然可以使用它。下面提供了一个最小示例。

// include composer autoload
require 'vendor/autoload.php';
 
// import the Finalizer Class
use Tuupke\Finalizer;
 
// Create a new instance of the Finalizer. The class itself does not provide late static binding (yet).
$finalizer = new Finalizer;
 
// register some closure.
$finalizer->register(function(){
    ... <YOUR CODE GOES HERE> ...
});