You are here

public function PrivateTempStore::set in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/TempStore/PrivateTempStore.php \Drupal\Core\TempStore\PrivateTempStore::set()
  2. 9 core/lib/Drupal/Core/TempStore/PrivateTempStore.php \Drupal\Core\TempStore\PrivateTempStore::set()

Stores a particular key/value pair in this PrivateTempStore.

Parameters

string $key: The key of the data to store.

mixed $value: The data to store.

Throws

\Drupal\Core\TempStore\TempStoreException Thrown when a lock for the backend storage could not be acquired.

File

core/lib/Drupal/Core/TempStore/PrivateTempStore.php, line 122

Class

PrivateTempStore
Stores and retrieves temporary data for a given owner.

Namespace

Drupal\Core\TempStore

Code

public function set($key, $value) {
  if ($this->currentUser
    ->isAnonymous()) {

    // Ensure that an anonymous user has a session created for them, as
    // otherwise subsequent page loads will not be able to retrieve their
    // tempstore data. Note this has to be done before the key is created as
    // the owner is used in key creation.
    $this
      ->startSession();
    $session = $this->requestStack
      ->getCurrentRequest()
      ->getSession();
    if (!$session
      ->has('core.tempstore.private.owner')) {
      $session
        ->set('core.tempstore.private.owner', Crypt::randomBytesBase64());
    }
  }
  $key = $this
    ->createkey($key);
  if (!$this->lockBackend
    ->acquire($key)) {
    $this->lockBackend
      ->wait($key);
    if (!$this->lockBackend
      ->acquire($key)) {
      throw new TempStoreException("Couldn't acquire lock to update item '{$key}' in '{$this->storage->getCollectionName()}' temporary storage.");
    }
  }
  $value = (object) [
    'owner' => $this
      ->getOwner(),
    'data' => $value,
    'updated' => (int) $this->requestStack
      ->getMainRequest()->server
      ->get('REQUEST_TIME'),
  ];
  $this->storage
    ->setWithExpire($key, $value, $this->expire);
  $this->lockBackend
    ->release($key);
}