@@ -114,7 +114,7 @@ public function getItem($key)
114
114
$ this ->commit ();
115
115
}
116
116
if (isset ($ this ->deferred [$ key ])) {
117
- return $ this ->deferred [$ key ];
117
+ return clone $ this ->deferred [$ key ];
118
118
}
119
119
120
120
$ f = $ this ->createCacheItem ;
@@ -138,38 +138,48 @@ public function getItems(array $keys = array())
138
138
}
139
139
$ f = $ this ->createCacheItem ;
140
140
$ ids = array ();
141
- $ items = array ();
142
141
143
142
foreach ($ keys as $ key ) {
144
143
$ id = $ this ->getId ($ key );
145
144
146
145
if (isset ($ this ->deferred [$ key ])) {
147
- $ items [ $ key] = $ this ->deferred [$ key ];
146
+ yield $ key => clone $ this ->deferred [$ key ];
148
147
} else {
149
- $ ids [$ key ] = $ id ;
148
+ $ ids [$ id ] = $ key ;
150
149
}
151
150
}
152
151
153
- $ values = $ this ->doFetch ($ ids );
154
-
155
- foreach ( $ ids as $ key => $ id ) {
156
- $ isHit = isset ( $ values [$ id ]);
157
- $ items [ $ key ] = $ f ( $ key , $ isHit ? $ values [ $ id ] : null , $ isHit );
152
+ foreach ( $ this ->doFetch (array_keys ( $ ids )) as $ id => $ value ) {
153
+ if ( isset ( $ ids [ $ id ])) {
154
+ yield $ ids [ $ id ] => $ f ( $ key , $ value , true );
155
+ unset( $ ids [$ id ]);
156
+ }
158
157
}
159
158
160
- return $ items ;
159
+ foreach ($ ids as $ id => $ key ) {
160
+ yield $ key => $ f ($ key , null , false );
161
+ }
161
162
}
162
163
163
164
/**
164
165
* {@inheritdoc}
165
166
*/
166
167
public function hasItem ($ key )
167
168
{
168
- if ($ this ->deferred ) {
169
- $ this ->commit ();
169
+ $ id = $ this ->getId ($ key );
170
+
171
+ if (isset ($ this ->deferred [$ key ])) {
172
+ static $ prefix = "\0Symfony\Component\Cache\CacheItem \0" ;
173
+ $ item = (array ) $ this ->deferred [$ key ];
174
+ $ ok = $ this ->doSave (array ($ item [$ prefix .'key ' ] => $ item [$ prefix .'value ' ]), $ item [$ prefix .'lifetime ' ]);
175
+ unset($ this ->deferred [$ key ]);
176
+
177
+ if (true === $ ok || array () === $ ok ) {
178
+ return true ;
179
+ }
170
180
}
171
181
172
- return $ this ->doHave ($ this -> getId ( $ key ) );
182
+ return $ this ->doHave ($ id );
173
183
}
174
184
175
185
/**
0 commit comments