EntityAutocompleteMatcher.php

Same filename in other branches
  1. 9 core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
  2. 10 core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
  3. 11.x core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php

Namespace

Drupal\Core\Entity

File

core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php

View source
<?php

namespace Drupal\Core\Entity;

use Drupal\Component\Utility\Html;
use Drupal\Component\Utility\Tags;
use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface;

/**
 * Matcher class to get autocompletion results for entity reference.
 */
class EntityAutocompleteMatcher implements EntityAutocompleteMatcherInterface {
    
    /**
     * The entity reference selection handler plugin manager.
     *
     * @var \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface
     */
    protected $selectionManager;
    
    /**
     * Constructs a EntityAutocompleteMatcher object.
     *
     * @param \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface $selection_manager
     *   The entity reference selection handler plugin manager.
     */
    public function __construct(SelectionPluginManagerInterface $selection_manager) {
        $this->selectionManager = $selection_manager;
    }
    
    /**
     * {@inheritDoc}
     */
    public function getMatches($target_type, $selection_handler, $selection_settings, $string = '') {
        $matches = [];
        $options = $selection_settings + [
            'target_type' => $target_type,
            'handler' => $selection_handler,
        ];
        $handler = $this->selectionManager
            ->getInstance($options);
        if (isset($string)) {
            // Get an array of matching entities.
            $match_operator = !empty($selection_settings['match_operator']) ? $selection_settings['match_operator'] : 'CONTAINS';
            $match_limit = isset($selection_settings['match_limit']) ? (int) $selection_settings['match_limit'] : 10;
            $entity_labels = $handler->getReferenceableEntities($string, $match_operator, $match_limit);
            // Loop through the entities and convert them into autocomplete output.
            foreach ($entity_labels as $values) {
                foreach ($values as $entity_id => $label) {
                    $key = "{$label} ({$entity_id})";
                    // Strip things like starting/trailing white spaces, line breaks and
                    // tags.
                    $key = preg_replace('/\\s\\s+/', ' ', str_replace("\n", '', trim(Html::decodeEntities(strip_tags($key)))));
                    // Names containing commas or quotes must be wrapped in quotes.
                    $key = Tags::encode($key);
                    $matches[] = [
                        'value' => $key,
                        'label' => $label,
                    ];
                }
            }
        }
        return $matches;
    }

}

Classes

Title Deprecated Summary
EntityAutocompleteMatcher Matcher class to get autocompletion results for entity reference.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.