component_library-1.0.x-dev/src/Controller/TagsAutocompleteController.php

src/Controller/TagsAutocompleteController.php
<?php

declare(strict_types=1);

namespace Drupal\component_library\Controller;

use Drupal\Component\Utility\Html;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

/**
 * Returns responses for Component Library autocomplete routes.
 */
final class TagsAutocompleteController extends ControllerBase {

  /**
   * Callback for Pattern tags autocompletion.
   *
   * Like other autocomplete functions, this function inspects the 'q' query
   * parameter for the string to use to search for suggestions.
   */
  public function autocompleteTags(Request $request): JsonResponse {

    $query = $request->query->get('q');
    if (!\is_string($query)) {
      throw new BadRequestHttpException();
    }
    $patterns = $this->entityTypeManager()->getStorage('component_library_pattern')->loadMultiple();

    $matches = [];
    // Keep track of previously processed tags so they can be skipped.
    $processed_tags = [];
    foreach ($patterns as $pattern) {
      foreach ($pattern->get('tags') as $tag) {
        if (\in_array($tag, $processed_tags)) {
          continue;
        }
        $processed_tags[] = $tag;
        if (\mb_stripos($tag, $query) === FALSE) {
          continue;
        }
        $matches[] = ['value' => $tag, 'label' => Html::escape($tag)];
        if (\count($matches) >= 10) {
          break 2;
        }
      }
    }

    return new JsonResponse($matches);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc