class EditableFieldsForm in Editable Fields 8
Same name and namespace in other branches
- 1.0.x src/Form/EditableFieldsForm.php \Drupal\editablefields\Form\EditableFieldsForm
Class EditableFieldsForm.
Hierarchy
- class \Drupal\Core\Form\FormBase implements ContainerInjectionInterface, FormInterface uses DependencySerializationTrait, LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\editablefields\Form\EditableFieldsForm implements BaseFormIdInterface
Expanded class hierarchy of EditableFieldsForm
File
- src/
Form/ EditableFieldsForm.php, line 14
Namespace
Drupal\editablefields\FormView source
class EditableFieldsForm extends FormBase implements BaseFormIdInterface {
/**
* Entity updated in the form.
*
* @var \Drupal\Core\Entity\EntityInterface
*/
protected $entity;
/**
* Field name.
*
* @var string
*/
protected $field_name;
/**
* Form mode.
*
* @var string
*/
protected $form_mode;
/**
* Drupal\editablefields\services\EditableFieldsHelperInterface definition.
*
* @var \Drupal\editablefields\services\EditableFieldsHelperInterface
*/
protected $editablefieldsHelper;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
$instance = parent::create($container);
$instance->editablefieldsHelper = $container
->get('editablefields.helper');
return $instance;
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return $this
->getBaseFormId() . '_' . $this
->prepareUniqueFormId();
}
/**
* {@inheritdoc}
*/
public function getBaseFormId() {
return 'editablefields_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$field = $this->field_name;
$form_display = $this
->getFormDisplay();
$is_admin = $this->editablefieldsHelper
->isAdmin();
if (empty($form_display) || !$form_display
->id()) {
if ($is_admin) {
return [
'#markup' => $this
->t('Form mode @mode missing', [
'@mode' => $this->form_mode,
]),
];
}
return [];
}
// Get the field widget from the form mode.
$component = $form_display
->getComponent($field);
if (!$component) {
if ($is_admin) {
return [
'#markup' => $this
->t('The field @field is missing in the @mode', [
'@field' => $field,
'@mode' => $this->form_mode,
]),
];
}
return [];
}
// Add #parents to avoid error in WidgetBase::form.
$form['#parents'] = [];
// Get widget and prepare values for it.
$widget = $form_display
->getRenderer($field);
$items = $this->entity
->get($field);
$items
->filterEmptyItems();
// Get a widget form.
$form[$field] = $widget
->form($items, $form, $form_state);
$form[$field]['#access'] = $items
->access('edit');
$form['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Update'),
'#ajax' => [
'callback' => [
$this,
'ajaxCallback',
],
'wrapper' => str_replace('_', '-', $this
->getFormId()),
],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$form_state
->setRebuild(TRUE);
$entity = $this->entity;
$field = $this->field_name;
$form_display = $this
->getFormDisplay();
if (!$form_display || !$form_display
->id()) {
return;
}
// Update the entity.
if ($component = $form_display
->getComponent($field)) {
$widget = $form_display
->getRenderer($field);
$items = $entity
->get($field);
$items
->filterEmptyItems();
$widget
->extractFormValues($items, $form, $form_state);
$entity
->save();
}
}
/**
* Editable field ajax callback.
*
* @param array $form
* Form array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* Form state object.
*
* @return array
* Updated form.
*/
public function ajaxCallback(array &$form, FormStateInterface $form_state) {
if (!$form_state
->getErrors()) {
$form['confirm_message'] = [
'#markup' => $this
->t('Updated'),
];
}
return $form;
}
/**
* Loads a form display mode.
*
* @return \Drupal\Core\Entity\Display\EntityFormDisplayInterface|NULL
* Display mode.
*/
public function getFormDisplay() {
return $this->editablefieldsHelper
->getFormDisplay($this->entity, $this->form_mode);
}
/**
* Set defaults to be used for unique form ID.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* Edited entity.
* @param $field_name
* Field name.
* @param $form_mode
* Form mode.
*/
public function setDefaults(EntityInterface $entity, $field_name, $form_mode = 'default') {
$this->entity = $entity;
$this->field_name = $field_name;
$this->form_mode = $form_mode;
}
/**
* Set unique form id.
*
* @return string
* Unique part of the form ID.
*/
public function prepareUniqueFormId() {
$entity = $this->entity;
$parts = [
$entity
->getEntityTypeId(),
$entity
->bundle(),
$entity
->id(),
$this->field_name,
$this->form_mode,
];
return implode('_', $parts);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
EditableFieldsForm:: |
protected | property | Drupal\editablefields\services\EditableFieldsHelperInterface definition. | |
EditableFieldsForm:: |
protected | property | Entity updated in the form. | |
EditableFieldsForm:: |
protected | property | Field name. | |
EditableFieldsForm:: |
protected | property | Form mode. | |
EditableFieldsForm:: |
public | function | Editable field ajax callback. | |
EditableFieldsForm:: |
public | function |
Form constructor. Overrides FormInterface:: |
|
EditableFieldsForm:: |
public static | function |
Instantiates a new instance of this class. Overrides FormBase:: |
|
EditableFieldsForm:: |
public | function |
Returns a string identifying the base form. Overrides BaseFormIdInterface:: |
|
EditableFieldsForm:: |
public | function | Loads a form display mode. | |
EditableFieldsForm:: |
public | function |
Returns a unique string identifying the form. Overrides FormInterface:: |
|
EditableFieldsForm:: |
public | function | Set unique form id. | |
EditableFieldsForm:: |
public | function | Set defaults to be used for unique form ID. | |
EditableFieldsForm:: |
public | function |
Form submission handler. Overrides FormInterface:: |
|
FormBase:: |
protected | property | The config factory. | 1 |
FormBase:: |
protected | property | The request stack. | 1 |
FormBase:: |
protected | property | The route match. | |
FormBase:: |
protected | function | Retrieves a configuration object. | |
FormBase:: |
protected | function | Gets the config factory for this form. | 1 |
FormBase:: |
private | function | Returns the service container. | |
FormBase:: |
protected | function | Gets the current user. | |
FormBase:: |
protected | function | Gets the request object. | |
FormBase:: |
protected | function | Gets the route match. | |
FormBase:: |
protected | function | Gets the logger for a specific channel. | |
FormBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
FormBase:: |
public | function | Resets the configuration factory. | |
FormBase:: |
public | function | Sets the config factory for this form. | |
FormBase:: |
public | function | Sets the request stack object to use. | |
FormBase:: |
public | function |
Form validation handler. Overrides FormInterface:: |
62 |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
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 | property | The string translation service. | 1 |
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. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |