doekenorg / cache-middleware
PSR-6 缓存池的实验性中间件装饰器
Requires
- psr/cache: ^1.0
Requires (Dev)
- cache/array-adapter: ^1.2
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-21 23:30:01 UTC
README
这是一个实验性软件包,为任何PSR-6 缓存池提供中间件。
用法
要应用中间件,您需要使用 DoekeNorg\CacheMiddleware\MiddlewareDecorator
装饰您的 PSR-6 缓存池。装饰器的构造函数接收装饰后的缓存池以及可选的中间件类列表。您还可以通过在装饰器上调用 addMiddleware(...$middlewares)
方法来添加更多中间件。
use DoekeNorg\CacheMiddleware\MiddlewareCachePool; $regular_psr6_cache_pool = ...; // your current PSR-6 cache pool $decorator_cache_pool = new MiddlewareCachePool($regular_psr6_cache_pool, ...$middlewares); //or $decorator_cache_pool = new MiddlewareCachePool($regular_psr6_cache_pool); $decorator_cache_pool->addMiddleware(...$middlewares);
中间件类型
本软件包提供了三个中间件接口
MiddlewareGetInterface
:此中间件与->getItem()
和->getItems()
一起调用MiddlewareSaveInterface
:此中间件与->save()
和->safeDefered()
一起调用MiddlewareDeleteInterface
:此中间件与->deleteItem()
和->deleteItems()
一起调用
实现接口
每个接口都有一个名为 process<Type>
的方法,该方法在中间件处理过程中被调用。因此,单个中间件类可以实现多个中间件接口,并实现一个共同的目标。
use DoekeNorg\CacheMiddleware\MiddlewareGetInterface; use DoekeNorg\CacheMiddleware\MiddlewareSaveInterface; use DoekeNorg\CacheMiddleware\MiddlewareDeleteInterface; use Psr\Cache\CacheItemInterface; final class ExampleMiddleware implements MiddlewareGetInterface, MiddlewareSaveInterface, MiddlewareDeleteInterface { public function processGet(string $key, callable $next): CacheItemInterface { $cache_item = $next($key); // do something to the cache item return $cache_item; } public function processSave(CacheItemInterface $cacheItem, callable $next): bool { // do something to the cache item return $next($cacheItem); } public function processDelete(string $key, callable $next): bool { // perform some action based on the key or the deleted result. return $next($key); } }
注意
此软件包是一个有趣的实验,旨在查看中间件模式是否可以在 PSR-6 缓存周围使用。该软件包正在开发中,实现可以在非稳定阶段发生变化。只要这是 0.*.*
版本,请将每个 次要 更改视为 主要 更新。
警告:虽然可以更改方法的缓存键,但我不建议在中间件中这样做。请使用它来更新缓存项(添加标签、删除给定键的其他项等)。
注意事项:为了在所有项目上触发中间件并结合 getItems()
和 deleteItems()
,这些函数 不 在装饰后的缓存池上调用这些函数,而是在装饰器上多次调用 getItem()
和 deleteItem()
。从技术上讲,这使得装饰器成为一个代理,但实际上它仍然是一个装饰器。只是请注意,如果您需要调用内部方法,这个软件包可能不适合您,您应该使用自定义装饰器。
变更日志
有关最近更改的更多信息,请参阅变更日志。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件。