@@ -145,12 +145,12 @@ protected function driverRead(CacheItemInterface $item)
145
145
throw new PhpfastcacheDriverException ('Got error while trying to get a document: ' . $ e ->getMessage (), 0 , $ e );
146
146
}
147
147
148
- if ($ response ->status === 404 || empty ($ response ->body [' data ' ])) {
148
+ if ($ response ->status === 404 || empty ($ response ->body [ExtendedCacheItemPoolInterface:: DRIVER_DATA_WRAPPER_INDEX ])) {
149
149
return null ;
150
150
}
151
151
152
152
if ($ response ->status === 200 ) {
153
- return $ this ->decode ($ response ->body [ ' data ' ] );
153
+ return $ this ->decode ($ response ->body );
154
154
}
155
155
156
156
throw new PhpfastcacheDriverException ('Got unexpected HTTP status: ' . $ response ->status );
@@ -170,7 +170,7 @@ protected function driverWrite(CacheItemInterface $item): bool
170
170
if ($ item instanceof Item) {
171
171
try {
172
172
$ this ->instance ->putDocument (
173
- [ ' data ' => $ this ->encode ($ this ->driverPreWrap ($ item ))] ,
173
+ $ this ->encodeDocument ($ this ->driverPreWrap ($ item )),
174
174
$ this ->getCouchDbItemKey ($ item ),
175
175
$ this ->getLatestDocumentRevision ($ this ->getCouchDbItemKey ($ item ))
176
176
);
@@ -247,4 +247,50 @@ protected function driverClear(): bool
247
247
248
248
return true ;
249
249
}
250
+
251
+ /**
252
+ * @param array $data
253
+ * @return array
254
+ */
255
+ protected function encodeDocument (array $ data ): array
256
+ {
257
+ $ data [ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX ] = $ this ->encode ($ data [ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX ]);
258
+
259
+ return $ data ;
260
+ }
261
+
262
+ /**
263
+ * Specific document decoder for Couchdb
264
+ * since we dont store encoded version
265
+ * for performance purposes
266
+ *
267
+ * @param $value
268
+ * @return mixed
269
+ * @throws \Exception
270
+ */
271
+ protected function decode ($ value )
272
+ {
273
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX ] = \unserialize ($ value [ExtendedCacheItemPoolInterface::DRIVER_DATA_WRAPPER_INDEX ], ['allowed_classes ' => true ]);
274
+
275
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_EDATE_WRAPPER_INDEX ] = new \DateTime (
276
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_EDATE_WRAPPER_INDEX ]['date ' ],
277
+ new \DateTimeZone ($ value [ExtendedCacheItemPoolInterface::DRIVER_EDATE_WRAPPER_INDEX ]['timezone ' ])
278
+ );
279
+
280
+ if (isset ($ value [ExtendedCacheItemPoolInterface::DRIVER_CDATE_WRAPPER_INDEX ])){
281
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_CDATE_WRAPPER_INDEX ] = new \DateTime (
282
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_CDATE_WRAPPER_INDEX ]['date ' ],
283
+ new \DateTimeZone ($ value [ExtendedCacheItemPoolInterface::DRIVER_CDATE_WRAPPER_INDEX ]['timezone ' ])
284
+ );
285
+ }
286
+
287
+ if (isset ($ value [ExtendedCacheItemPoolInterface::DRIVER_MDATE_WRAPPER_INDEX ])){
288
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_MDATE_WRAPPER_INDEX ] = new \DateTime (
289
+ $ value [ExtendedCacheItemPoolInterface::DRIVER_MDATE_WRAPPER_INDEX ]['date ' ],
290
+ new \DateTimeZone ($ value [ExtendedCacheItemPoolInterface::DRIVER_MDATE_WRAPPER_INDEX ]['timezone ' ])
291
+ );
292
+ }
293
+
294
+ return $ value ;
295
+ }
250
296
}
0 commit comments