function NodeForm::save

Same name and namespace in other branches
  1. 8.9.x core/modules/node/src/NodeForm.php \Drupal\node\NodeForm::save()
  2. 10 core/modules/node/src/NodeForm.php \Drupal\node\NodeForm::save()
  3. 11.x core/modules/node/src/NodeForm.php \Drupal\node\NodeForm::save()

Overrides EntityForm::save

File

core/modules/node/src/NodeForm.php, line 267

Class

NodeForm
Form handler for the node edit forms.

Namespace

Drupal\node

Code

public function save(array $form, FormStateInterface $form_state) {
    $node = $this->entity;
    $insert = $node->isNew();
    $node->save();
    $node_link = $node->toLink($this->t('View'))
        ->toString();
    $context = [
        '@type' => $node->getType(),
        '%title' => $node->label(),
        'link' => $node_link,
    ];
    $t_args = [
        '@type' => node_get_type_label($node),
        '%title' => $node->toLink()
            ->toString(),
    ];
    if ($insert) {
        $this->logger('content')
            ->notice('@type: added %title.', $context);
        $this->messenger()
            ->addStatus($this->t('@type %title has been created.', $t_args));
    }
    else {
        $this->logger('content')
            ->notice('@type: updated %title.', $context);
        $this->messenger()
            ->addStatus($this->t('@type %title has been updated.', $t_args));
    }
    if ($node->id()) {
        $form_state->setValue('nid', $node->id());
        $form_state->set('nid', $node->id());
        if ($node->access('view')) {
            $form_state->setRedirect('entity.node.canonical', [
                'node' => $node->id(),
            ]);
        }
        else {
            $form_state->setRedirect('<front>');
        }
        // Remove the preview entry from the temp store, if any.
        $store = $this->tempStoreFactory
            ->get('node_preview');
        $store->delete($node->uuid());
    }
    else {
        // In the unlikely case something went wrong on save, the node will be
        // rebuilt and node form redisplayed the same way as in preview.
        $this->messenger()
            ->addError($this->t('The post could not be saved.'));
        $form_state->setRebuild();
    }
}

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