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