@@ -145,12 +145,12 @@ protected function driverRead(CacheItemInterface $item)
145145 throw new PhpfastcacheDriverException ('Got error while trying to get a document: ' . $ e ->getMessage (), 0 , $ e );
146146 }
147147
148- if ($ response ->status === 404 || empty ($ response ->body [' data ' ])) {
148+ if ($ response ->status === 404 || empty ($ response ->body [ExtendedCacheItemPoolInterface:: DRIVER_DATA_WRAPPER_INDEX ])) {
149149 return null ;
150150 }
151151
152152 if ($ response ->status === 200 ) {
153- return $ this ->decode ($ response ->body [ ' data ' ] );
153+ return $ this ->decode ($ response ->body );
154154 }
155155
156156 throw new PhpfastcacheDriverException ('Got unexpected HTTP status: ' . $ response ->status );
@@ -170,7 +170,7 @@ protected function driverWrite(CacheItemInterface $item): bool
170170 if ($ item instanceof Item) {
171171 try {
172172 $ this ->instance ->putDocument (
173- [ ' data ' => $ this ->encode ($ this ->driverPreWrap ($ item ))] ,
173+ $ this ->encodeDocument ($ this ->driverPreWrap ($ item )),
174174 $ this ->getCouchDbItemKey ($ item ),
175175 $ this ->getLatestDocumentRevision ($ this ->getCouchDbItemKey ($ item ))
176176 );
@@ -247,4 +247,50 @@ protected function driverClear(): bool
247247
248248 return true ;
249249 }
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+ }
250296}
0 commit comments