class PathElement

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Render/Element/PathElement.php \Drupal\Core\Render\Element\PathElement
  2. 8.9.x core/lib/Drupal/Core/Render/Element/PathElement.php \Drupal\Core\Render\Element\PathElement
  3. 10 core/lib/Drupal/Core/Render/Element/PathElement.php \Drupal\Core\Render\Element\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 an array containing a route name and route parameters pair.

Attributes

#[FormElement('path')]

Hierarchy

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 15

Namespace

Drupal\Core\Render\Element
View 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();
    $info['#validate_path'] = TRUE;
    $info['#convert_path'] = self::CONVERT_ROUTE;
    $info['#element_validate'] = [
      [
        static::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. 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
FormElementBase::processAutocomplete public static function Adds autocomplete functionality to elements. 1
FormElementBase::processPattern public static function Render API callback: Handles the #pattern form element property. 1
FormElementBase::validatePattern public static function Render API callback: Handles the #pattern form element property.. 1
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
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 7
PluginInspectionInterface::getPluginId public function Gets the plugin ID of the plugin instance. 3
RenderElementBase::$renderParent protected property The parent element.
RenderElementBase::$renderParentName protected property The parent key.
RenderElementBase::$storage protected property The storage.
RenderElementBase::addChild public function Adds a child render element. Overrides ElementInterface::addChild
RenderElementBase::changeType public function Change the type of the element. Overrides ElementInterface::changeType
RenderElementBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
RenderElementBase::createChild public function Creates a render object and attaches it to the current render object. Overrides ElementInterface::createChild
RenderElementBase::elementInfoManager protected function Returns the element info manager.
RenderElementBase::getChild public function Gets a child. Overrides ElementInterface::getChild
RenderElementBase::getChildren public function Returns child elements. Overrides ElementInterface::getChildren
RenderElementBase::initializeInternalStorage public function Initialize storage. Overrides ElementInterface::initializeInternalStorage
RenderElementBase::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript. 2
RenderElementBase::preRenderGroup public static function Adds members of this group as actual elements for rendering. 2
RenderElementBase::processAjaxForm public static function Form element processing handler for the #ajax form property. 3
RenderElementBase::processGroup public static function Arranges elements into groups. 2
RenderElementBase::removeChild public function Removes a child. Overrides ElementInterface::removeChild
RenderElementBase::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes 2
RenderElementBase::setType protected function Set type on initialize.
RenderElementBase::toRenderable public function Returns a render array. Overrides ElementInterface::toRenderable
RenderElementBase::__construct public function Constructs a new render element object.
RenderElementBase::__get public function Magic method: gets a property value.
RenderElementBase::__isset public function Magic method: checks if a property value is set.
RenderElementBase::__set public function Magic method: Sets a property value.
RenderElementBase::__sleep public function
RenderElementBase::__unset public function Magic method: unsets a property value.
RenderElementBase::__wakeup public function
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.