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 |
---|---|---|---|---|
FormBase:: |
public | function |
Form validation handler. Overrides FormInterface:: |
47 |
EntityForm:: |
protected | function | Returns an array of supported actions for the current entity form. | 24 |
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:: |
15 |
EntityForm:: |
public | function |
Returns a unique string identifying the form. Overrides FormInterface:: |
12 |
EntityForm:: |
public | function |
Form constructor. Overrides FormInterface:: |
10 |
EntityForm:: |
protected | function | Copies top-level form values to entity properties. | 9 |
MessengerTrait:: |
public | function | Gets the messenger. | 8 |
EntityForm:: |
protected | property | The entity being used by this form. | 8 |
MessengerTrait:: |
protected | property | The messenger. | 8 |
EntityForm:: |
public | function |
Returns a string identifying the base form. Overrides BaseFormIdInterface:: |
4 |
EntityForm:: |
protected | property | The entity type manager. | 3 |
StringTranslationTrait:: |
protected | property | The string translation service. | 3 |
EntityForm:: |
protected | function | Initialize the form state and the entity before the first form build. | 2 |
EntityForm:: |
protected | function | Prepares the entity object before the form is built first. | 2 |
FormBase:: |
protected | function | Gets the config factory for this form. | 2 |
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
EntityForm:: |
protected | property | The module handler service. | 2 |
FormBase:: |
protected | property | The config factory. | 2 |
EntityForm:: |
public | function |
Determines which entity will be used by this form from a RouteMatch object. Overrides EntityFormInterface:: |
1 |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 1 |
FormBase:: |
protected | property | The request stack. | 1 |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
VocabularyForm:: |
public | function | Constructs a new vocabulary form. | |
VocabularyForm:: |
public static | function |
Instantiates a new instance of this class. Overrides FormBase:: |
|
VocabularyForm:: |
public | function |
Gets the actual form array to be built. Overrides EntityForm:: |
|
VocabularyForm:: |
public | function |
Form submission handler for the 'save' action. Overrides EntityForm:: |
|
VocabularyForm:: |
public | function | Determines if the vocabulary already exists. | |
VocabularyForm:: |
public | function |
Builds an updated entity object based upon the submitted form values. Overrides EntityForm:: |
|
BundleEntityFormBase:: |
protected | function | Protects the bundle entity's ID property's form element against changes. | |
EntityForm:: |
public | function |
Sets the operation for this form. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function | Process callback: assigns weights and hides extra fields. | |
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:: |
public | function |
Gets the form entity. Overrides EntityFormInterface:: |
|
EntityForm:: |
public | function |
Sets the form entity. Overrides EntityFormInterface:: |
|
EntityForm:: |
protected | function | Invokes the specified prepare hook variant. | |
EntityForm:: |
public | function |
Gets the operation identifying the 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:: |
|
FormBase:: |
protected | function | Retrieves a configuration object. | |
FormBase:: |
public | function | Sets the config factory for this form. | |
FormBase:: |
public | function | Resets the configuration factory. | |
FormBase:: |
protected | function | Gets the request object. | |
FormBase:: |
protected | function | Gets the route match. | |
FormBase:: |
public | function | Sets the request stack object to use. | |
FormBase:: |
protected | function | Gets the current user. | |
FormBase:: |
protected | function | Returns a redirect response object for the specified route. | |
FormBase:: |
private | function | Returns the service container. | |
FormBase:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
VocabularyForm:: |
protected | property | The vocabulary storage. | |
EntityForm:: |
protected | property | The name of the current operation. | |
FormBase:: |
protected | property | The route match. | |
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
LoggerChannelTrait:: |
protected | property | The logger channel factory service. |