Ich versuche jetzt, eine Implementierung von PSR-6
Als ich die CacheItemPoolInterface
-Schnittstelle implementierte, war ich verwirrt über die save
-Methode. Die save
-Methode erhielt nur einen Parameter vom Typ CacheItemInterface
, aber die CacheItemInterface
-Schnittstelle stellte keine ähnliche Methode bereit zu getExpireTime
, was dazu führt, dass CacheItemPoolInterface
die Ablaufzeit des Cache-Elements nicht ermitteln kann und daher die Daten nicht korrekt in den Cache-Speicher schreiben kann.
Ich habe mehrere bekannte PSR-6
-Implementierungen gesehen, wie z. B. symfony/cache php-cache/cache tedious/Stash. Allerdings sind diese Implementierungsversionen bei der Implementierung der save
-Methode nicht sehr elegant.
Zum Beispielsymfony/cache
<code>public function save(CacheItemInterface $item) { if (!$item instanceof CacheItem) { return false; } if ($this->deferred) { $this->commit(); } $this->deferred[$item->getKey()] = $item; return $this->commit(); }</code>
Diese save
-Methode kann nur Parameter des Typs SymfonyComponentCacheCacheItem
übergeben. Die Übergabe anderer Typen gibt false
zurück.
Die aktuelle Situation ist, dass Sie, wenn Sie eine Klassenbibliothek schreiben möchten, die Caching verwendet, eine bestimmte PSR-6
-Implementierung als Abhängigkeit angeben müssen, nicht nur psr/cache
. Wenn Sie sich andererseits die Protokollschnittstelle PSR-3
ansehen und eine Klassenbibliothek schreiben möchten, die Protokollierungsfunktionen erfordert, müssen Sie nur psr/log
einführen, und es ist keine spezifische Implementierung erforderlich.
Meiner Meinung nach benötigt PSR-6
nicht die CacheItemInterface
-Schnittstelle, ändern Sie einfach die save
-Methode in save($key, $value, $expire_at)
.
Ich habe auf Packagist nach Cache gesucht, z. B. doctrine/cache
sonata-project/cache
illuminate/cache
usw., aber ich habe mich nicht dafür entschieden, PSR-6
zu folgen
PSR-6
zu schreiben
-Schnittstelle implementierte, war ich verwirrt über die CacheItemPoolInterface
-Methode. Die save
-Methode erhielt nur einen Parameter vom Typ save
, aber die CacheItemInterface
-Schnittstelle stellte keine ähnliche Methode bereit zu CacheItemInterface
, was dazu führt, dass getExpireTime
die Ablaufzeit des Cache-Elements nicht ermitteln kann und daher die Daten nicht korrekt in den Cache-Speicher schreiben kann. CacheItemPoolInterface
-Implementierungen gesehen, wie z. B. symfony/cache php-cache/cache tedious/Stash. Allerdings sind diese Implementierungsversionen bei der Implementierung der PSR-6
-Methode nicht sehr elegant. save
symfony/cache
<code>public function save(CacheItemInterface $item) { if (!$item instanceof CacheItem) { return false; } if ($this->deferred) { $this->commit(); } $this->deferred[$item->getKey()] = $item; return $this->commit(); }</code>
-Methode kann nur Parameter des Typs save
übergeben. Die Übergabe anderer Typen gibt SymfonyComponentCacheCacheItem
zurück. false
-Implementierung als Abhängigkeit angeben müssen, nicht nur PSR-6
. Wenn Sie sich andererseits die Protokollschnittstelle psr/cache
ansehen und eine Klassenbibliothek schreiben möchten, die Protokollierungsfunktionen erfordert, müssen Sie nur PSR-3
einführen, und es ist keine spezifische Implementierung erforderlich. psr/log
nicht die PSR-6
-Schnittstelle, ändern Sie einfach die CacheItemInterface
-Methode in save
. save($key, $value, $expire_at)
doctrine/cache
sonata-project/cache
usw., aber ich habe mich nicht dafür entschieden, illuminate/cache
zu folgen