123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace Drupal\Core\State;
- use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
- /**
- * Provides the state system using a key value store.
- */
- class State implements StateInterface {
- /**
- * The key value store to use.
- *
- * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
- */
- protected $keyValueStore;
- /**
- * Static state cache.
- *
- * @var array
- */
- protected $cache = [];
- /**
- * Constructs a State object.
- *
- * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
- * The key value store to use.
- */
- public function __construct(KeyValueFactoryInterface $key_value_factory) {
- $this->keyValueStore = $key_value_factory->get('state');
- }
- /**
- * {@inheritdoc}
- */
- public function get($key, $default = NULL) {
- $values = $this->getMultiple([$key]);
- return isset($values[$key]) ? $values[$key] : $default;
- }
- /**
- * {@inheritdoc}
- */
- public function getMultiple(array $keys) {
- $values = [];
- $load = [];
- foreach ($keys as $key) {
- // Check if we have a value in the cache.
- if (isset($this->cache[$key])) {
- $values[$key] = $this->cache[$key];
- }
- // Load the value if we don't have an explicit NULL value.
- elseif (!array_key_exists($key, $this->cache)) {
- $load[] = $key;
- }
- }
- if ($load) {
- $loaded_values = $this->keyValueStore->getMultiple($load);
- foreach ($load as $key) {
- // If we find a value, even one that is NULL, add it to the cache and
- // return it.
- if (isset($loaded_values[$key]) || array_key_exists($key, $loaded_values)) {
- $values[$key] = $loaded_values[$key];
- $this->cache[$key] = $loaded_values[$key];
- }
- else {
- $this->cache[$key] = NULL;
- }
- }
- }
- return $values;
- }
- /**
- * {@inheritdoc}
- */
- public function set($key, $value) {
- $this->cache[$key] = $value;
- $this->keyValueStore->set($key, $value);
- }
- /**
- * {@inheritdoc}
- */
- public function setMultiple(array $data) {
- foreach ($data as $key => $value) {
- $this->cache[$key] = $value;
- }
- $this->keyValueStore->setMultiple($data);
- }
- /**
- * {@inheritdoc}
- */
- public function delete($key) {
- $this->deleteMultiple([$key]);
- }
- /**
- * {@inheritdoc}
- */
- public function deleteMultiple(array $keys) {
- foreach ($keys as $key) {
- unset($this->cache[$key]);
- }
- $this->keyValueStore->deleteMultiple($keys);
- }
- /**
- * {@inheritdoc}
- */
- public function resetCache() {
- $this->cache = [];
- }
- }
|