Same name and namespace in other branches
- 8.9.x core/modules/taxonomy/src/VocabularyForm.php \Drupal\taxonomy\VocabularyForm
- 9 core/modules/taxonomy/src/VocabularyForm.php \Drupal\taxonomy\VocabularyForm
Base form for vocabulary edit forms.
@internal
Hierarchy
- class \Drupal\Core\Form\FormBase implements ContainerInjectionInterface, FormInterface uses DependencySerializationTrait, LoggerChannelTrait, MessengerTrait, RedirectDestinationTrait, StringTranslationTrait
- class \Drupal\Core\Entity\EntityForm implements EntityFormInterface
- class \Drupal\Core\Entity\BundleEntityFormBase
- class \Drupal\taxonomy\VocabularyForm
- class \Drupal\Core\Entity\BundleEntityFormBase
- class \Drupal\Core\Entity\EntityForm implements EntityFormInterface
Expanded class hierarchy of VocabularyForm
File
- core/
modules/ taxonomy/ src/ VocabularyForm.php, line 17
Namespace
Drupal\taxonomyView source
class VocabularyForm extends BundleEntityFormBase {
/**
* The vocabulary storage.
*
* @var \Drupal\taxonomy\VocabularyStorageInterface
*/
protected $vocabularyStorage;
/**
* Constructs a new vocabulary form.
*
* @param \Drupal\taxonomy\VocabularyStorageInterface $vocabulary_storage
* The vocabulary storage.
*/
public function __construct(VocabularyStorageInterface $vocabulary_storage) {
$this->vocabularyStorage = $vocabulary_storage;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.manager')
->getStorage('taxonomy_vocabulary'));
}
/**
* {@inheritdoc}
*/
public function buildEntity(array $form, FormStateInterface $form_state) {
/** @var \Drupal\taxonomy\VocabularyInterface $entity */
$entity = parent::buildEntity($form, $form_state);
// The description cannot be an empty string.
if (trim($form_state
->getValue('description')) === '') {
$entity
->set('description', NULL);
}
return $entity;
}
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state) {
$vocabulary = $this->entity;
if ($vocabulary
->isNew()) {
$form['#title'] = $this
->t('Add vocabulary');
}
else {
$form['#title'] = $this
->t('Edit vocabulary');
}
$form['name'] = [
'#type' => 'textfield',
'#title' => $this
->t('Name'),
'#default_value' => $vocabulary
->label(),
'#maxlength' => 255,
'#required' => TRUE,
];
$form['vid'] = [
'#type' => 'machine_name',
'#default_value' => $vocabulary
->id(),
'#maxlength' => EntityTypeInterface::BUNDLE_MAX_LENGTH,
'#machine_name' => [
'exists' => [
$this,
'exists',
],
'source' => [
'name',
],
],
];
$form['description'] = [
'#type' => 'textfield',
'#title' => $this
->t('Description'),
'#default_value' => $vocabulary
->getDescription(),
];
$form['revision'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Create new revision'),
'#default_value' => $vocabulary
->shouldCreateNewRevision(),
'#description' => $this
->t('Create a new revision by default for this vocabulary.'),
];
// $form['langcode'] is not wrapped in an
// if ($this->moduleHandler->moduleExists('language')) check because the
// language_select form element works also without the language module being
// installed. https://www.drupal.org/node/1749954 documents the new element.
$form['langcode'] = [
'#type' => 'language_select',
'#title' => $this
->t('Vocabulary language'),
'#languages' => LanguageInterface::STATE_ALL,
'#default_value' => $vocabulary
->language()
->getId(),
];
if ($this->moduleHandler
->moduleExists('language')) {
$form['default_terms_language'] = [
'#type' => 'details',
'#title' => $this
->t('Term language'),
'#open' => TRUE,
];
$form['default_terms_language']['default_language'] = [
'#type' => 'language_configuration',
'#entity_information' => [
'entity_type' => 'taxonomy_term',
'bundle' => $vocabulary
->id(),
],
'#default_value' => ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', $vocabulary
->id()),
];
}
// Set the hierarchy to "multiple parents" by default. This simplifies the
// vocabulary form and standardizes the term form.
$form['hierarchy'] = [
'#type' => 'value',
'#value' => '0',
];
$form = parent::form($form, $form_state);
return $this
->protectBundleIdElement($form);
}
/**
* {@inheritdoc}
*/
public function save(array $form, FormStateInterface $form_state) {
$vocabulary = $this->entity;
$vocabulary
->setNewRevision($form_state
->getValue([
'revision',
]));
// Prevent leading and trailing spaces in vocabulary names.
$vocabulary
->set('name', trim($vocabulary
->label()));
$status = $vocabulary
->save();
$edit_link = $this->entity
->toLink($this
->t('Edit'), 'edit-form')
->toString();
switch ($status) {
case SAVED_NEW:
$this
->messenger()
->addStatus($this
->t('Created new vocabulary %name.', [
'%name' => $vocabulary
->label(),
]));
$this
->logger('taxonomy')
->notice('Created new vocabulary %name.', [
'%name' => $vocabulary
->label(),
'link' => $edit_link,
]);
$form_state
->setRedirectUrl($vocabulary
->toUrl('overview-form'));
break;
case SAVED_UPDATED:
$this
->messenger()
->addStatus($this
->t('Updated vocabulary %name.', [
'%name' => $vocabulary
->label(),
]));
$this
->logger('taxonomy')
->notice('Updated vocabulary %name.', [
'%name' => $vocabulary
->label(),
'link' => $edit_link,
]);
$form_state
->setRedirectUrl($vocabulary
->toUrl('collection'));
break;
}
$form_state
->setValue('vid', $vocabulary
->id());
$form_state
->set('vid', $vocabulary
->id());
}
/**
* Determines if the vocabulary already exists.
*
* @param string $vid
* The vocabulary ID.
*
* @return bool
* TRUE if the vocabulary exists, FALSE otherwise.
*/
public function exists($vid) {
$action = $this->vocabularyStorage
->load($vid);
return !empty($action);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
VocabularyForm:: |
public | function | Constructs a new vocabulary form. | |
VocabularyForm:: |
public | function |
Form submission handler for the 'save' action. Overrides EntityForm:: |
|
VocabularyForm:: |
public | function |
Gets the actual form array to be built. Overrides EntityForm:: |
|
VocabularyForm:: |
public | function | Determines if the vocabulary already exists. | |
VocabularyForm:: |
public static | function |
Instantiates a new instance of this class. Overrides FormBase:: |
|
VocabularyForm:: |
public | function |
Builds an updated entity object based upon the submitted form values. Overrides EntityForm:: |
|
VocabularyForm:: |
protected | property | The vocabulary storage. | |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 1 |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 3 |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
MessengerTrait:: |
public | function | Sets the messenger. | |
MessengerTrait:: |
public | function | Gets the messenger. | 10 |
MessengerTrait:: |
protected | property | The messenger. | 10 |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
FormBase:: |
public | function |
Form validation handler. Overrides FormInterface:: |
51 |
FormBase:: |
public | function | Sets the request stack object to use. | |
FormBase:: |
public | function | Sets the config factory for this form. | |
FormBase:: |
public | function | Resets the configuration factory. | |
FormBase:: |
protected | function | Returns a redirect response object for the specified route. | |
FormBase:: |
protected | function | Gets the logger for a specific channel. | |
FormBase:: |
protected | function | Gets the route match. | |
FormBase:: |
protected | function | Gets the request object. | |
FormBase:: |
protected | function | Gets the current user. | |
FormBase:: |
private | function | Returns the service container. | |
FormBase:: |
protected | function | Gets the config factory for this form. | 2 |
FormBase:: |
protected | function | Retrieves a configuration object. | |
FormBase:: |
protected | property | The route match. | |
FormBase:: |
protected | property | The request stack. | 1 |
FormBase:: |
protected | property | The config factory. | 2 |
EntityForm:: |
public | function |
This is the default entity object builder function. It is called before any
other submit handler to build the new entity object to be used by the
following submit handlers. At this point of the form workflow the entity is
validated and the form stateā¦ Overrides FormInterface:: |
16 |
EntityForm:: |
public | function |
Sets the operation for this form. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Sets the module handler for this form. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Sets the entity type manager for this form. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Sets the form entity. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function | Process callback: assigns weights and hides extra fields. | |
EntityForm:: |
protected | function | Invokes the specified prepare hook variant. | |
EntityForm:: |
protected | function | Prepares the entity object before the form is built first. | 2 |
EntityForm:: |
protected | function | Initialize the form state and the entity before the first form build. | 2 |
EntityForm:: |
public | function |
Gets the operation identifying the form. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Returns a unique string identifying the form. Overrides FormInterface:: |
12 |
EntityForm:: |
public | function |
Determines which entity will be used by this form from a RouteMatch object. Overrides EntityFormInterface:: |
1 |
EntityForm:: |
public | function |
Gets the form entity. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Returns a string identifying the base form. Overrides BaseFormIdInterface:: |
4 |
EntityForm:: |
protected | function | Copies top-level form values to entity properties. | 9 |
EntityForm:: |
public | function |
Form constructor. Overrides FormInterface:: |
10 |
EntityForm:: |
public | function | Form element #after_build callback: Updates the entity with submitted data. | |
EntityForm:: |
protected | function | Returns the action form element for the current entity form. | |
EntityForm:: |
protected | function | Returns an array of supported actions for the current entity form. | 25 |
EntityForm:: |
protected | property | The name of the current operation. | |
EntityForm:: |
protected | property | The module handler service. | 2 |
EntityForm:: |
protected | property | The entity type manager. | 3 |
EntityForm:: |
protected | property | The entity being used by this form. | 8 |
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
BundleEntityFormBase:: |
protected | function | Protects the bundle entity's ID property's form element against changes. |