@@ -74,8 +74,8 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
74
74
75
75
if ($ cacheItem ->isHit ()) {
76
76
$ data = $ cacheItem ->get ();
77
- // The isset () is to be removed in 2.0.
78
- if (isset ( $ data ['expiresAt ' ]) && time () < $ data ['expiresAt ' ]) {
77
+ // The array_key_exists () is to be removed in 2.0.
78
+ if (array_key_exists ( ' expiresAt ' , $ data) && ( $ data ['expiresAt ' ] === null || time () < $ data ['expiresAt ' ]) ) {
79
79
// This item is still valid according to previous cache headers
80
80
return new FulfilledPromise ($ this ->createResponseFromCacheItem ($ cacheItem ));
81
81
}
@@ -103,8 +103,8 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
103
103
// The cached response we have is still valid
104
104
$ data = $ cacheItem ->get ();
105
105
$ maxAge = $ this ->getMaxAge ($ response );
106
- $ data ['expiresAt ' ] = time () + $ maxAge ;
107
- $ cacheItem ->set ($ data )->expiresAfter ($ this ->config [ ' cache_lifetime ' ] + $ maxAge );
106
+ $ data ['expiresAt ' ] = $ this -> calculateResponseExpiresAt ( $ maxAge) ;
107
+ $ cacheItem ->set ($ data )->expiresAfter ($ this ->calculateCacheItemExpiresAfter ( $ maxAge) );
108
108
$ this ->pool ->save ($ cacheItem );
109
109
110
110
return $ this ->createResponseFromCacheItem ($ cacheItem );
@@ -120,14 +120,13 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
120
120
}
121
121
122
122
$ maxAge = $ this ->getMaxAge ($ response );
123
- $ currentTime = time ();
124
123
$ cacheItem
125
- ->expiresAfter ($ this ->config [ ' cache_lifetime ' ] + $ maxAge )
124
+ ->expiresAfter ($ this ->calculateCacheItemExpiresAfter ( $ maxAge) )
126
125
->set ([
127
126
'response ' => $ response ,
128
127
'body ' => $ body ,
129
- 'expiresAt ' => $ currentTime + $ maxAge ,
130
- 'createdAt ' => $ currentTime ,
128
+ 'expiresAt ' => $ this -> calculateResponseExpiresAt ( $ maxAge) ,
129
+ 'createdAt ' => time () ,
131
130
'etag ' => $ response ->getHeader ('ETag ' ),
132
131
]);
133
132
$ this ->pool ->save ($ cacheItem );
@@ -137,6 +136,34 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
137
136
});
138
137
}
139
138
139
+ /**
140
+ * @param int|null $maxAge
141
+ *
142
+ * @return int|null
143
+ */
144
+ private function calculateCacheItemExpiresAfter ($ maxAge )
145
+ {
146
+ if ($ this ->config ['cache_lifetime ' ] === null && $ maxAge === null ) {
147
+ return ;
148
+ }
149
+
150
+ return $ this ->config ['cache_lifetime ' ] + $ maxAge ;
151
+ }
152
+
153
+ /**
154
+ * @param int|null $maxAge
155
+ *
156
+ * @return int|null
157
+ */
158
+ private function calculateResponseExpiresAt ($ maxAge )
159
+ {
160
+ if ($ maxAge === null ) {
161
+ return ;
162
+ }
163
+
164
+ return time () + $ maxAge ;
165
+ }
166
+
140
167
/**
141
168
* Verify that we can cache this response.
142
169
*
@@ -237,12 +264,12 @@ private function configureOptions(OptionsResolver $resolver)
237
264
{
238
265
$ resolver ->setDefaults ([
239
266
'cache_lifetime ' => 86400 * 30 , // 30 days
240
- 'default_ttl ' => null ,
267
+ 'default_ttl ' => 0 ,
241
268
'respect_cache_headers ' => true ,
242
269
'hash_algo ' => 'sha1 ' ,
243
270
]);
244
271
245
- $ resolver ->setAllowedTypes ('cache_lifetime ' , 'int ' );
272
+ $ resolver ->setAllowedTypes ('cache_lifetime ' , [ 'int ' , ' null ' ] );
246
273
$ resolver ->setAllowedTypes ('default_ttl ' , ['int ' , 'null ' ]);
247
274
$ resolver ->setAllowedTypes ('respect_cache_headers ' , 'bool ' );
248
275
$ resolver ->setAllowedValues ('hash_algo ' , hash_algos ());
0 commit comments