elasticsearch_helper_instant-8.x-6.x-dev/src/Controller/InstantSearchResults.php

src/Controller/InstantSearchResults.php
<?php

namespace Drupal\elasticsearch_helper_instant\Controller;

use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
use Drupal\elasticsearch_helper_instant\ElasticsearchInstantSearchService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Class InstantSearchResults.
 */
class InstantSearchResults extends ControllerBase {

  /**
   * The request_stack service.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;

  /**
   * The elasticsearch_helper_instant.search service.
   *
   * @var \Drupal\elasticsearch_helper_instant\ElasticsearchInstantSearchService
   */
  protected $search;

  /**
   * The page_cache_kill_switch service.
   *
   * @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
   */
  protected $pageCacheKillSwitch;

  /**
   * Constructs a new InstantSearchResults object.
   */
  public function __construct(
    RequestStack $request_stack,
    ElasticsearchInstantSearchService $search,
    KillSwitch $page_cache_kill_switch
  ) {
    $this->requestStack = $request_stack;
    $this->search = $search;
    $this->pageCacheKillSwitch = $page_cache_kill_switch;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('request_stack'),
      $container->get('elasticsearch_helper_instant.search'),
      $container->get('page_cache_kill_switch')
    );
  }

  /**
   * Return results for given search keyword.
   *
   * @return \Symfony\Component\HttpFoundation\Response
   *   Return a response object with the output.
   */
  public function retrieveResults() {
    $query = $this->requestStack->getCurrentRequest()->query;
    $options = [
      'rendermode' => $query->get('rendermode'),
      'format' => $query->get('format'),
      'debug' => $query->get('debug'),
    ];

    // Do the query.
    $result = $this->search->query($query->get('searchphrase'));

    // Prepare output.
    $output = $this->search->render($result, $options);

    // Prepare response.
    if (is_array($output)) {
      $response = new JsonResponse($output);
      return $response;
    }

    $response = new Response();
    $response->setContent($output);
    $this->pageCacheKillSwitch->trigger();
    return $response;
  }

}

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

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