tuupke/ laravel-finalizer
一个简单的包,提供处理关闭连接后执行的辅助函数
1.0.4
2019-03-26 12:50 UTC
Requires
- php: >=7.0.0
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> ...
});