@@ -40,7 +40,7 @@ trait ContractsTrait
40
40
public function setCallbackWrapper (?callable $ callbackWrapper ): callable
41
41
{
42
42
$ previousWrapper = $ this ->callbackWrapper ;
43
- $ this ->callbackWrapper = $ callbackWrapper ?? function (callable $ callback , ItemInterface $ item , bool &$ save , CacheInterface $ pool ) {
43
+ $ this ->callbackWrapper = $ callbackWrapper ?? function (callable $ callback , ItemInterface $ item , bool &$ save , CacheInterface $ pool, \ Closure $ setMetadata ) {
44
44
return $ callback ($ item , $ save );
45
45
};
46
46
@@ -56,17 +56,19 @@ private function doGet(AdapterInterface $pool, string $key, callable $callback,
56
56
static $ setMetadata ;
57
57
58
58
$ setMetadata = $ setMetadata ?? \Closure::bind (
59
- function (AdapterInterface $ pool , ItemInterface $ item , float $ startTime ) {
59
+ function (CacheItem $ item , float $ startTime , ? array & $ metadata ) {
60
60
if ($ item ->expiry > $ endTime = microtime (true )) {
61
- $ item ->newMetadata [ItemInterface::METADATA_EXPIRY ] = $ item ->expiry ;
62
- $ item ->newMetadata [ItemInterface::METADATA_CTIME ] = 1000 * (int ) ($ endTime - $ startTime );
61
+ $ item ->newMetadata [CacheItem::METADATA_EXPIRY ] = $ metadata [CacheItem::METADATA_EXPIRY ] = $ item ->expiry ;
62
+ $ item ->newMetadata [CacheItem::METADATA_CTIME ] = $ metadata [CacheItem::METADATA_CTIME ] = 1000 * (int ) ($ endTime - $ startTime );
63
+ } else {
64
+ unset($ metadata [CacheItem::METADATA_EXPIRY ], $ metadata [CacheItem::METADATA_CTIME ]);
63
65
}
64
66
},
65
67
null ,
66
68
CacheItem::class
67
69
);
68
70
69
- return $ this ->contractsGet ($ pool , $ key , function (CacheItem $ item , bool &$ save ) use ($ pool , $ callback , $ setMetadata ) {
71
+ return $ this ->contractsGet ($ pool , $ key , function (CacheItem $ item , bool &$ save ) use ($ pool , $ callback , $ setMetadata, & $ metadata ) {
70
72
// don't wrap nor save recursive calls
71
73
if (null === $ callbackWrapper = $ this ->callbackWrapper ) {
72
74
$ value = $ callback ($ item , $ save );
@@ -78,8 +80,10 @@ function (AdapterInterface $pool, ItemInterface $item, float $startTime) {
78
80
$ startTime = microtime (true );
79
81
80
82
try {
81
- $ value = $ callbackWrapper ($ callback , $ item , $ save , $ pool );
82
- $ setMetadata ($ pool , $ item , $ startTime );
83
+ $ value = $ callbackWrapper ($ callback , $ item , $ save , $ pool , function (CacheItem $ item ) use ($ setMetadata , $ startTime , &$ metadata ) {
84
+ $ setMetadata ($ item , $ startTime , $ metadata );
85
+ });
86
+ $ setMetadata ($ item , $ startTime , $ metadata );
83
87
84
88
return $ value ;
85
89
} finally {
0 commit comments