class PathElement
Provides a matched path render element.
Provides a form element to enter a path which can be optionally validated and stored as either a \Drupal\Core\Url value object or a array containing a route name and route parameters pair.
Plugin annotation
@FormElement("path");Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase- class \Drupal\Core\Render\Element\RenderElement implements \Drupal\Core\Render\Element\ElementInterface extends \Drupal\Core\Plugin\PluginBase- class \Drupal\Core\Render\Element\FormElement implements \Drupal\Core\Render\Element\FormElementInterface extends \Drupal\Core\Render\Element\RenderElement- class \Drupal\Core\Render\Element\Textfield extends \Drupal\Core\Render\Element\FormElement- class \Drupal\Core\Render\Element\PathElement extends \Drupal\Core\Render\Element\Textfield
 
 
- class \Drupal\Core\Render\Element\Textfield extends \Drupal\Core\Render\Element\FormElement
 
- class \Drupal\Core\Render\Element\FormElement implements \Drupal\Core\Render\Element\FormElementInterface extends \Drupal\Core\Render\Element\RenderElement
 
- class \Drupal\Core\Render\Element\RenderElement implements \Drupal\Core\Render\Element\ElementInterface extends \Drupal\Core\Plugin\PluginBase
 
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase
Expanded class hierarchy of PathElement
2 files declare their use of PathElement
- ContactFormEditForm.php in core/modules/ contact/ src/ ContactFormEditForm.php 
- PathElementFormTest.php in core/tests/ Drupal/ KernelTests/ Core/ Element/ PathElementFormTest.php 
2 #type uses of PathElement
- ContactFormEditForm::form in core/modules/ contact/ src/ ContactFormEditForm.php 
- Gets the actual form array to be built.
- PathElementFormTest::buildForm in core/tests/ Drupal/ KernelTests/ Core/ Element/ PathElementFormTest.php 
- Form constructor.
File
- 
              core/lib/ Drupal/ Core/ Render/ Element/ PathElement.php, line 16 
Namespace
Drupal\Core\Render\ElementView source
class PathElement extends Textfield {
  
  /**
   * Do not convert the submitted value from the user-supplied path.
   */
  const CONVERT_NONE = 0;
  
  /**
   * Convert the submitted value into a route name and parameter pair.
   */
  const CONVERT_ROUTE = 1;
  
  /**
   * Convert the submitted value into a \Drupal\Core\Url value object.
   */
  const CONVERT_URL = 2;
  
  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    $info = parent::getInfo();
    $class = get_class($this);
    $info['#validate_path'] = TRUE;
    $info['#convert_path'] = self::CONVERT_ROUTE;
    $info['#element_validate'] = [
      [
        $class,
        'validateMatchedPath',
      ],
    ];
    return $info;
  }
  
  /**
   * {@inheritdoc}
   */
  public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
    return NULL;
  }
  
  /**
   * Form element validation handler for matched_path elements.
   *
   * Note that #maxlength is validated by _form_validate() already.
   *
   * This checks that the submitted value matches an active route.
   */
  public static function validateMatchedPath(&$element, FormStateInterface $form_state, &$complete_form) {
    if (!empty($element['#value']) && ($element['#validate_path'] || $element['#convert_path'] != self::CONVERT_NONE)) {
      /** @var \Drupal\Core\Url $url */
      if ($url = \Drupal::service('path.validator')->getUrlIfValid($element['#value'])) {
        if ($url->isExternal()) {
          $form_state->setError($element, t('You cannot use an external URL, please enter a relative path.'));
          return;
        }
        if ($element['#convert_path'] == self::CONVERT_NONE) {
          // Url is valid, no conversion required.
          return;
        }
        // We do the value conversion here whilst the Url object is in scope
        // after validation has occurred.
        if ($element['#convert_path'] == self::CONVERT_ROUTE) {
          $form_state->setValueForElement($element, [
            'route_name' => $url->getRouteName(),
            'route_parameters' => $url->getRouteParameters(),
          ]);
          return;
        }
        elseif ($element['#convert_path'] == self::CONVERT_URL) {
          $form_state->setValueForElement($element, $url);
          return;
        }
      }
      $form_state->setError($element, t('This path does not exist or you do not have permission to link to %path.', [
        '%path' => $element['#value'],
      ]));
    }
  }
}Members
| Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides | 
|---|---|---|---|---|---|
| DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | ||
| DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | ||
| DependencySerializationTrait::__sleep | public | function | 1 | ||
| DependencySerializationTrait::__wakeup | public | function | 2 | ||
| FormElement::processAutocomplete | public static | function | Adds autocomplete functionality to elements. | ||
| FormElement::processPattern | public static | function | #process callback for #pattern form element property. | ||
| FormElement::validatePattern | public static | function | #element_validate callback for #pattern form element property. | ||
| MessengerTrait::$messenger | protected | property | The messenger. | 29 | |
| MessengerTrait::messenger | public | function | Gets the messenger. | 29 | |
| MessengerTrait::setMessenger | public | function | Sets the messenger. | ||
| PathElement::CONVERT_NONE | constant | Do not convert the submitted value from the user-supplied path. | |||
| PathElement::CONVERT_ROUTE | constant | Convert the submitted value into a route name and parameter pair. | |||
| PathElement::CONVERT_URL | constant | Convert the submitted value into a \Drupal\Core\Url value object. | |||
| PathElement::getInfo | public | function | Returns the element properties for this element. | Overrides Textfield::getInfo | |
| PathElement::validateMatchedPath | public static | function | Form element validation handler for matched_path elements. | ||
| PathElement::valueCallback | public static | function | Determines how user input is mapped to an element's #value property. | Overrides Textfield::valueCallback | |
| 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 | 3 | 
| 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. | 78 | |
| 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. | 1 | |
| 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. | ||
| Textfield::preRenderTextfield | public static | function | Prepares a #type 'textfield' render element for input.html.twig. | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
