Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

RedirectableUrlMatcher.php

Namespace

Symfony\Component\Routing\Matcher

File

vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php

View source
<?php


/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\Routing\Matcher;

use Symfony\Component\Routing\Exception\ExceptionInterface;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

/**
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class RedirectableUrlMatcher extends UrlMatcher implements RedirectableUrlMatcherInterface {
    public function match(string $pathinfo) : array {
        try {
            return parent::match($pathinfo);
        } catch (ResourceNotFoundException $e) {
            if (!\in_array($this->context
                ->getMethod(), [
                'HEAD',
                'GET',
            ], true)) {
                throw $e;
            }
            if ($this->allowSchemes) {
                redirect_scheme:
                $scheme = $this->context
                    ->getScheme();
                $this->context
                    ->setScheme(current($this->allowSchemes));
                try {
                    $ret = parent::match($pathinfo);
                    return $this->redirect($pathinfo, $ret['_route'] ?? null, $this->context
                        ->getScheme()) + $ret;
                } catch (ExceptionInterface) {
                    throw $e;
                } finally {
                    $this->context
                        ->setScheme($scheme);
                }
            }
            elseif ('/' === ($trimmedPathinfo = rtrim($pathinfo, '/') ?: '/')) {
                throw $e;
            }
            else {
                try {
                    $pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo . '/' : $trimmedPathinfo;
                    $ret = parent::match($pathinfo);
                    return $this->redirect($pathinfo, $ret['_route'] ?? null) + $ret;
                } catch (ExceptionInterface) {
                    if ($this->allowSchemes) {
                        goto redirect_scheme;
                    }
                    throw $e;
                }
            }
        }
    }

}

Classes

Title Deprecated Summary
RedirectableUrlMatcher @author Fabien Potencier <fabien@symfony.com>

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal