hn-8.x-1.x-dev/src/Plugin/HnPathResolver/RedirectResolver.php

src/Plugin/HnPathResolver/RedirectResolver.php
<?php

namespace Drupal\hn\Plugin\HnPathResolver;

use Drupal\Core\Url;
use Drupal\hn\HnPathResolverResponse;
use Drupal\hn\Plugin\HnPathResolverBase;

/**
 * This provides a 404 resolver.
 *
 * @HnPathResolver(
 *   id = "hn_redirect"
 * )
 */
class RedirectResolver extends HnPathResolverBase {

  /**
   * {@inheritdoc}
   */
  public function resolve($path) {
    $redirect_service = \Drupal::service('redirect.repository');
    // Source path has no leading /.
    $source_path = trim($path, '/');
    /** @var \Drupal\redirect\Entity\Redirect $redirect */
    // Get all redirects by original url.
    $redirect = $redirect_service->findMatchingRedirect($source_path, []);
    if (empty($redirect)) {
      return NULL;
    }
    // Get 301/302.
    $status = (int) $redirect->getStatusCode();
    // Get the redirect uri.
    $uri = $redirect->getRedirect()['uri'];

    // Check if it is an internal url.
    $url = Url::fromUri($uri);

    if ($url->isExternal()) {
      return new HnPathResolverResponse($redirect, $status);
    }

    $internal_path = $url->getInternalPath();

    /** @var \Drupal\hn\Plugin\HnPathResolverManager $path_resolver */
    $path_resolver = \Drupal::service('hn.path_resolver');
    $entity = $path_resolver->resolve($internal_path)->getEntity();

    return new HnPathResolverResponse($entity, $status);
  }

}

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

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