You are here

class Actions in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Render/Element/Actions.php \Drupal\Core\Render\Element\Actions

Provides a wrapper element to group one or more buttons in a form.

Use of a single Actions element with an array key of 'actions' to group the primary submit buttons on a form helps to ensure proper styling in themes, and enables other modules to properly alter a form's actions.

Usage example:

$form['actions'] = array(
  '#type' => 'actions',
);
$form['actions']['submit'] = array(
  '#type' => 'submit',
  '#value' => $this
    ->t('Save'),
);

Plugin annotation

@RenderElement("actions");

Hierarchy

Expanded class hierarchy of Actions

5 string references to 'Actions'
action.info.yml in core/modules/action/action.info.yml
core/modules/action/action.info.yml
action.links.menu.yml in core/modules/action/action.links.menu.yml
core/modules/action/action.links.menu.yml
action.routing.yml in core/modules/action/action.routing.yml
core/modules/action/action.routing.yml
d6_action.yml in core/modules/action/migrations/d6_action.yml
core/modules/action/migrations/d6_action.yml
d7_action.yml in core/modules/action/migrations/d7_action.yml
core/modules/action/migrations/d7_action.yml
64 #type uses of Actions
ActionAdminManageForm::buildForm in core/modules/action/src/Form/ActionAdminManageForm.php
Form constructor.
ActionsTest::buildForm in core/tests/Drupal/KernelTests/Core/Render/Element/ActionsTest.php
Form constructor.
AddFormBase::buildActions in core/modules/media_library/src/Form/AddFormBase.php
Returns an array of supported actions for the form.
AjaxCssForm::buildForm in core/modules/ckeditor/tests/modules/src/Form/AjaxCssForm.php
Form constructor.
AjaxFormBlock::buildForm in core/modules/system/tests/modules/ajax_forms_test/src/Plugin/Block/AjaxFormBlock.php
Form constructor.

... See full list

File

core/lib/Drupal/Core/Render/Element/Actions.php, line 27

Namespace

Drupal\Core\Render\Element
View source
class Actions extends Container {

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    $class = static::class;
    return [
      '#process' => [
        // @todo Move this to #pre_render.
        [
          $class,
          'preRenderActionsDropbutton',
        ],
        [
          $class,
          'processActions',
        ],
        [
          $class,
          'processContainer',
        ],
      ],
      '#weight' => 100,
      '#theme_wrappers' => [
        'container',
      ],
    ];
  }

  /**
   * Processes a form actions container element.
   *
   * @param array $element
   *   An associative array containing the properties and children of the
   *   form actions container.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   * @param array $complete_form
   *   The complete form structure.
   *
   * @return array
   *   The processed element.
   */
  public static function processActions(&$element, FormStateInterface $form_state, &$complete_form) {
    $element['#attributes']['class'][] = 'form-actions';
    return $element;
  }

  /**
   * #pre_render callback for #type 'actions'.
   *
   * This callback iterates over all child elements of the #type 'actions'
   * container to look for elements with a #dropbutton property, so as to group
   * those elements into dropbuttons. As such, it works similar to #group, but is
   * specialized for dropbuttons.
   *
   * The value of #dropbutton denotes the dropbutton to group the child element
   * into. For example, two different values of 'foo' and 'bar' on child elements
   * would generate two separate dropbuttons, which each contain the corresponding
   * buttons.
   *
   * @param array $element
   *   The #type 'actions' element to process.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   * @param array $complete_form
   *   The complete form structure.
   *
   * @return array
   *   The processed #type 'actions' element, including individual buttons grouped
   *   into new #type 'dropbutton' elements.
   */
  public static function preRenderActionsDropbutton(&$element, FormStateInterface $form_state, &$complete_form) {
    $dropbuttons = [];
    foreach (Element::children($element, TRUE) as $key) {
      if (isset($element[$key]['#dropbutton'])) {
        $dropbutton = $element[$key]['#dropbutton'];

        // If there is no dropbutton for this button group yet, create one.
        if (!isset($dropbuttons[$dropbutton])) {
          $dropbuttons[$dropbutton] = [
            '#type' => 'dropbutton',
          ];
        }

        // Add this button to the corresponding dropbutton.
        // @todo Change #type 'dropbutton' to be based on item-list.html.twig
        //   instead of links.html.twig to avoid this preemptive rendering.
        $button = \Drupal::service('renderer')
          ->renderPlain($element[$key]);
        $dropbuttons[$dropbutton]['#links'][$key] = [
          'title' => $button,
        ];

        // Merge metadata like drupalSettings.
        BubbleableMetadata::createFromRenderArray($dropbuttons[$dropbutton])
          ->merge(BubbleableMetadata::createFromRenderArray($element[$key]))
          ->applyTo($dropbuttons[$dropbutton]);
      }
    }

    // @todo For now, all dropbuttons appear first. Consider to invent a more
    //   fancy sorting/injection algorithm here.
    return $dropbuttons + $element;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Actions::getInfo public function Returns the element properties for this element. Overrides Container::getInfo
Actions::preRenderActionsDropbutton public static function #pre_render callback for #type 'actions'.
Actions::processActions public static function Processes a form actions container element.
Container::preRenderContainer public static function Prevents optional containers from rendering if they have no children.
Container::processContainer public static function Processes a container element.
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 98
RenderElement::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript.
RenderElement::preRenderGroup public static function Adds members of this group as actual elements for rendering.
RenderElement::processAjaxForm public static function Form element processing handler for the #ajax form property. 1
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.