function StageBase::claim
Attempts to claim the stage.
Once a stage has been created, no operations can be performed on it until it is claimed. This is to ensure that stage operations across multiple requests are being done by the same code, running under the same user or session that created the stage in the first place. To claim a stage, the calling code must provide the unique identifier that was generated when the stage was created.
The stage is claimed when it is created, so external code does NOT need to call this method after calling ::create() in the same request.
Parameters
string $unique_id: The unique ID that was returned by ::create().
Return value
$this
Throws
\Drupal\package_manager\Exception\StageOwnershipException If the stage cannot be claimed. This can happen if the current user or session did not originally create the stage, if $unique_id doesn't match the unique ID that was generated when the stage was created, or the current class is not the same one that was used to create the stage.
See also
::create()
1 call to StageBase::claim()
- StageBase::create in core/
modules/ package_manager/ src/ StageBase.php - Copies the active code base into the stage directory.
File
-
core/
modules/ package_manager/ src/ StageBase.php, line 642
Class
- StageBase
- Creates and manages a stage directory in which to install or update code.
Namespace
Drupal\package_managerCode
public final function claim(string $unique_id) : self {
$this->failureMarker
->assertNotExists();
if ($this->isAvailable()) {
// phpcs:disable DrupalPractice.General.ExceptionT.ExceptionT
// @see https://www.drupal.org/project/auto_updates/issues/3338651
throw new StageException($this, $this->computeDestroyMessage($unique_id, $this->t('Cannot claim the stage because no stage has been created.'))
->render());
}
$stored_lock = $this->tempStore
->getIfOwner(static::TEMPSTORE_LOCK_KEY);
if (!$stored_lock) {
throw new StageOwnershipException($this, $this->computeDestroyMessage($unique_id, $this->t('Cannot claim the stage because it is not owned by the current user or session.'))
->render());
}
if ($stored_lock === [
$unique_id,
static::class,
$this->getType(),
]) {
$this->lock = $stored_lock;
return $this;
}
throw new StageOwnershipException($this, $this->computeDestroyMessage($unique_id, $this->t('Cannot claim the stage because the current lock does not match the stored lock.'))
->render());
// phpcs:enable DrupalPractice.General.ExceptionT.ExceptionT
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.