function PathItem::postSave

Same name in other branches
  1. 9 core/modules/path/src/Plugin/Field/FieldType/PathItem.php \Drupal\path\Plugin\Field\FieldType\PathItem::postSave()
  2. 8.9.x core/modules/path/src/Plugin/Field/FieldType/PathItem.php \Drupal\path\Plugin\Field\FieldType\PathItem::postSave()
  3. 10 core/modules/path/src/Plugin/Field/FieldType/PathItem.php \Drupal\path\Plugin\Field\FieldType\PathItem::postSave()

Overrides FieldItemBase::postSave

File

core/modules/path/src/Plugin/Field/FieldType/PathItem.php, line 71

Class

PathItem
Defines the 'path' entity field type.

Namespace

Drupal\path\Plugin\Field\FieldType

Code

public function postSave($update) {
    $path_alias_storage = \Drupal::entityTypeManager()->getStorage('path_alias');
    $entity = $this->getEntity();
    $alias = $this->get('alias')
        ->getValue();
    $pid = $this->get('pid')
        ->getValue();
    $langcode = $this->get('langcode')
        ->getValue();
    // If specified, rely on the langcode property for the language, so that the
    // existing language of an alias can be kept. That could for example be
    // unspecified even if the field/entity has a specific langcode.
    $alias_langcode = $langcode && $pid ? $langcode : $this->getLangcode();
    // If we have an alias, we need to create or update a path alias entity.
    if ($alias) {
        if (!$update || !$pid) {
            $path_alias = $path_alias_storage->create([
                'path' => '/' . $entity->toUrl()
                    ->getInternalPath(),
                'alias' => $alias,
                'langcode' => $alias_langcode,
            ]);
            $path_alias->save();
            $this->set('pid', $path_alias->id());
        }
        else {
            $path_alias = $path_alias_storage->load($pid);
            if ($alias != $path_alias->getAlias()) {
                $path_alias->setAlias($alias);
                $path_alias->save();
            }
        }
    }
    elseif ($pid) {
        // Otherwise, delete the old alias if the user erased it.
        $path_alias = $path_alias_storage->load($pid);
        if ($entity->isDefaultRevision()) {
            $path_alias_storage->delete([
                $path_alias,
            ]);
        }
        else {
            $path_alias_storage->deleteRevision($path_alias->getRevisionID());
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.